+++ /dev/null
-/*******************************************************************************
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * 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.devicemanager.impl.database;
-
-import java.util.Collection;
-import java.util.List;
-import org.eclipse.jdt.annotation.Nullable;
-import org.onap.ccsdk.features.sdnr.wt.common.database.DatabaseClient;
-import org.onap.ccsdk.features.sdnr.wt.common.database.IsEsObject;
-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.QueryBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Generic class to write lists of model classes to the database.
- *
- */
-public class HtDataBaseReaderAndWriter<T extends IsEsObject> {
-
- private static final Logger log = LoggerFactory.getLogger(HtDataBaseReaderAndWriter.class);
-
-
- private final DatabaseClient db;
- private final String dataTypeName;
- private final HtMapper<T> mapper;
-
- /**
- * Class specific access to database
- * @param db ES database descriptor
- * @param dataTypeName datatype name
- * @param clazz class of datatype
- */
- public HtDataBaseReaderAndWriter(DatabaseClient db, String dataTypeName, Class<? extends T> clazz) {
-
- this.db = db;
- this.dataTypeName = dataTypeName;
- this.mapper = new HtMapper<>( clazz );
-
- }
- public boolean isExistsIndex() {
- return this.db.isExistsIndex(this.dataTypeName);
- }
- /**
- * @return dataTypeName
- */
- public String getDataTypeName() {
- return this.dataTypeName;
- }
- /**
- * Remove Object from database
- * @param object Object with content
- * @return true if remove is done
- */
- public boolean doRemove( T object) {
-
- return db.doRemove(dataTypeName, object );
-
- }
-
- /**
- * Remove all data that match the filter
- * @param query to specify data to be deleted
- * @return number of removed objects
- */
- public int doRemoveByQuery(QueryBuilder query) {
-
- int idx = 0; //Idx for getAll
- int iterateLength = 100; //Step width for iterate
-
- List<SearchHit> hits;
- do {
- hits = db.doReadByQueryJsonData( dataTypeName, query).getHits();
- log.debug("Found: {} elements: {} Failures: {}",dataTypeName,hits.size(), mapper.getMappingFailures());
-
- T object;
- idx += hits.size();
- for (SearchHit hit : hits) {
-
- object = mapper.getObjectFromJson( hit.getSourceAsString() );
-
- log.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n Failures: {}", hit.getId(), hit.getSourceAsString(), object, mapper.getMappingFailures());
- if (object != null) {
- object.setEsId( hit.getId() );
- doRemove(object);
- } else {
- log.warn("Mapp result null Object: {}\n Source: '{}'\n : '", hit.getId(), hit.getSourceAsString());
- }
- }
- } while (hits.size() == iterateLength); //Do it until end indicated, because less hits than iterateLength allows.
-
- return idx;
- }
-
- /**
- * Do the mapping for test purpose
- * @param object object for test purpose
- * @return json String
- */
- public String getJson( T object ) {
- String json = mapper.objectToJson(object);
- return json;
- }
-
- /**
- * Write one object into Database
- * @param object Object with content
- * @return This object for chained call pattern.
- */
- public T doWrite( T object) {
-
- String json = mapper.objectToJson(object);
- return doWrite(object, json);
-
- }
-
- /**
- * Write one object into Database
- * @param object Object with content
- * @param json string
- * @return This object for chained call pattern.
- */
- public T doWrite( T object, String json) {
-
- log.debug("doWrite {} {}",object.getClass().getSimpleName(), object.getEsId());
-
- if (json != null) {
- String esId = db.doWriteJsonString(dataTypeName, object, json);
- object.setEsId(esId);
- log.debug("doWrite done for {} {}",object.getClass().getSimpleName(), object.getEsId());
- return esId == null ? null : object;
- } else {
- log.warn("Can not map object and write to database. {} {}",object.getClass().getSimpleName(), object);
- return null;
- }
-
- }
-
-
- /**
- * Write a list of Objects to the database.
- * @param list Object list with content
- * @return This object for chained call pattern.
- */
- public HtDataBaseReaderAndWriter<T> doWrite( Collection<T> list) {
-
- int writeError = 0;
- log.debug("Write to ES database {} Class: {} {} elements",dataTypeName, mapper.getClazz().getSimpleName(), list.size());
-
- if (list != null && !list.isEmpty()) {
- for( T s : list ) {
- if ( doWrite(s) == null ) {
- if ( ++writeError > 5 ) {
- log.warn("Leave because of to >5 write errors");
- break;
- }
- }
- }
- }
-
- return this;
- }
-
- /**
- * Read one object via the object class specific ID
- * @param object Object refrenced by idString
- * @return The Object if found or null
- */
- public @Nullable T doRead( IsEsObject object ) {
- T res = mapper.getObjectFromJson( db.doReadJsonData( dataTypeName, object) );
- if (res != null) {
- res.setEsId(object.getEsId());
- }
- return res;
- }
-
- /**
- * Read one object via the object class specific ID
- * @param objectEsId Object refrence
- * @return The Object if found or null
- */
- public @Nullable T doRead( String objectEsId ) {
- T res = mapper.getObjectFromJson( db.doReadJsonData( dataTypeName, objectEsId ) );
- if (res != null) {
- res.setEsId(objectEsId);
- }
- return res;
- }
- /**
- * Get all elements of related type
- * @return all Elements
- */
- public SearchResult<T> doReadAll() {
- return doReadAll(null);
- }
-
- /**
- * Read all existing objects of a type
- * @param query for the elements
- * @return the list of all objects
- */
-
- public SearchResult<T> doReadAll(QueryBuilder query) {
-
- SearchResult<T> res = new SearchResult<>();
- int idx = 0; //Idx for getAll
- int iterateLength = 100; //Step width for iterate
-
- SearchResult<SearchHit> result;
- List<SearchHit> hits;
- do {
- if(query!=null) {
- log.debug("read data in {} with query {}",dataTypeName,query.toJSON());
- result=db.doReadByQueryJsonData( dataTypeName, query);
- }
- else {
- result = db.doReadAllJsonData( dataTypeName);
- }
- hits=result.getHits();
- log.debug("Read: {} elements: {} Failures: {}",dataTypeName,hits.size(), mapper.getMappingFailures());
-
- T object;
- idx += result.getHits().size();
- for (SearchHit hit : hits) {
-
-// object = mapper.getObjectFromJson( hit.getSourceRef() );
- object = mapper.getObjectFromJson( hit.getSourceAsString() );
-
- log.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n Failures: {}", hit.getId(), hit.getSourceAsString(), object, mapper.getMappingFailures());
- if (object != null) {
- object.setEsId( hit.getId() );
- res.add( object );
- } else {
- log.warn("Mapp result null Object: {}\n Source: '{}'\n : '", hit.getId(), hit.getSourceAsString());
- }
- }
- } while (hits.size() == iterateLength); //Do it until end indicated, because less hits than iterateLength allows.
- res.setTotal(idx);
- return res;
- }
-
-}