2 * ============LICENSE_START========================================================================
\r
3 * ONAP : tr-069-adapter
\r
4 * =================================================================================================
\r
5 * Copyright (C) 2020 CommScope Inc Intellectual Property.
\r
6 * =================================================================================================
\r
7 * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
\r
8 * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
\r
9 * may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
\r
14 * either express or implied. See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
16 * ===============LICENSE_END=======================================================================
\r
19 package org.commscope.tr069adapter.acs.requestprocessor.dao;
\r
21 import java.util.ArrayList;
\r
22 import java.util.Collections;
\r
23 import java.util.Comparator;
\r
24 import java.util.HashMap;
\r
25 import java.util.Iterator;
\r
26 import java.util.List;
\r
27 import java.util.Map;
\r
29 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
\r
30 import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;
\r
31 import org.commscope.tr069adapter.acs.common.utils.ErrorCode;
\r
32 import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;
\r
33 import org.commscope.tr069adapter.acs.requestprocessor.util.TR069RequestProcessorUtility;
\r
34 import org.slf4j.Logger;
\r
35 import org.slf4j.LoggerFactory;
\r
36 import org.springframework.beans.factory.annotation.Autowired;
\r
37 import org.springframework.stereotype.Component;
\r
40 public class DeviceRPCRequestRepositoryHelper {
\r
42 private static final Logger logger =
\r
43 LoggerFactory.getLogger(DeviceRPCRequestRepositoryHelper.class);
\r
46 protected DeviceRPCRequestRepository deviceRPCRequestRepository;
\r
49 * @param tr069DeviceRPCRequestEntities
\r
51 public void saveAll(List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities) {
\r
52 deviceRPCRequestRepository.saveAll(tr069DeviceRPCRequestEntities);
\r
59 public List<TR069DeviceRPCRequestEntity> findByDeviceId(String deviceId) {
\r
60 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =
\r
61 deviceRPCRequestRepository.findByDeviceId(deviceId);
\r
62 Collections.sort(deviceRPCRequestEntities, idComparator);
\r
63 return deviceRPCRequestEntities;
\r
68 * @param operationId
\r
71 public List<TR069DeviceRPCRequestEntity> findByDeviceIdAndOperationId(String deviceId,
\r
73 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =
\r
74 deviceRPCRequestRepository.findByDeviceIdAndOperationId(deviceId, operationId);
\r
75 Collections.sort(deviceRPCRequestEntities, idComparator);
\r
76 return deviceRPCRequestEntities;
\r
82 * @throws TR069EventProcessingException
\r
84 public List<DeviceRPCRequest> findAllDeviceRPCRequests(String deviceId) {
\r
85 logger.debug("Retrieving all the pending Device RPC requests");
\r
86 List<DeviceRPCRequest> deviceRPCRequestList = new ArrayList<>();
\r
87 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =
\r
88 deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(deviceId, 0);
\r
89 if (deviceRPCRequestEntities == null) {
\r
90 logger.debug("There exists no pending RPC requests for the device: {}", deviceId);
\r
91 return deviceRPCRequestList;
\r
94 logger.debug("Grouping the records based on operationId");
\r
95 Map<Long, List<TR069DeviceRPCRequestEntity>> opIdEntityMap = new HashMap<>();
\r
96 for (TR069DeviceRPCRequestEntity entity : deviceRPCRequestEntities) {
\r
97 List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(entity.getOperationId());
\r
98 if (entityList == null) {
\r
99 entityList = new ArrayList<>();
\r
100 opIdEntityMap.put(entity.getOperationId(), entityList);
\r
102 entityList.add(entity);
\r
105 logger.debug("There exists {} pending NBI requests for the device", opIdEntityMap.size());
\r
106 Iterator<Long> opIdIterator = opIdEntityMap.keySet().iterator();
\r
107 while (opIdIterator.hasNext()) {
\r
108 Long operationId = opIdIterator.next();
\r
109 List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(operationId);
\r
110 Collections.sort(entityList, idComparator);
\r
111 deviceRPCRequestList.add(TR069RequestProcessorUtility.convertToDTO(entityList));
\r
114 return deviceRPCRequestList;
\r
120 * @throws TR069EventProcessingException
\r
123 public DeviceRPCRequest findOldestDeviceRPCRequest(String deviceId) {
\r
124 logger.debug("Retrieving the oldest pending Device RPC request");
\r
126 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities =
\r
127 deviceRPCRequestRepository.findByDeviceIdAndIsProcessed(deviceId, 0);
\r
128 if (deviceRPCRequestEntities == null || deviceRPCRequestEntities.isEmpty()) {
\r
129 logger.debug("There exists no pending Device RPC requests for the device: {}", deviceId);
\r
133 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList =
\r
134 getOldestDeviceRPCRequestList(deviceRPCRequestEntities);
\r
136 if (deviceRPCRequestEntityList != null) {
\r
137 Collections.sort(deviceRPCRequestEntityList, idComparator);
\r
138 return TR069RequestProcessorUtility.convertToDTO(deviceRPCRequestEntityList);
\r
140 logger.debug("Empty deviceRPCRequestEntityList");
\r
146 private List<TR069DeviceRPCRequestEntity> getOldestDeviceRPCRequestList(
\r
147 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntities) {
\r
148 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList = null;
\r
150 logger.debug("Grouping the records based on operationId");
\r
151 Map<Long, List<TR069DeviceRPCRequestEntity>> opIdEntityMap = new HashMap<>();
\r
152 for (TR069DeviceRPCRequestEntity entity : deviceRPCRequestEntities) {
\r
153 List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(entity.getOperationId());
\r
154 if (entityList == null) {
\r
155 entityList = new ArrayList<>();
\r
156 opIdEntityMap.put(entity.getOperationId(), entityList);
\r
158 entityList.add(entity);
\r
161 Iterator<Long> opIdIterator = opIdEntityMap.keySet().iterator();
\r
162 while (opIdIterator.hasNext()) {
\r
163 Long operationId = opIdIterator.next();
\r
164 List<TR069DeviceRPCRequestEntity> entityList = opIdEntityMap.get(operationId);
\r
165 TR069DeviceRPCRequestEntity entity = entityList.get(0);
\r
166 if (deviceRPCRequestEntityList == null) {
\r
167 deviceRPCRequestEntityList = entityList;
\r
169 if (entity.getCreateTime().before(deviceRPCRequestEntityList.get(0).getCreateTime()))
\r
170 deviceRPCRequestEntityList = entityList;
\r
174 return deviceRPCRequestEntityList;
\r
178 * @param operationId
\r
179 * @throws TR069EventProcessingException
\r
181 public void markDeviceRPCRequestAsProcessed(String deviceId, Long operationId)
\r
182 throws TR069EventProcessingException {
\r
183 logger.debug("Marking the Device RPC request for device: {} and operationId: {} as processed",
\r
184 deviceId, operationId);
\r
185 List<TR069DeviceRPCRequestEntity> deviceRPCRequestEntityList =
\r
186 deviceRPCRequestRepository.findByDeviceIdAndOperationId(deviceId, operationId);
\r
187 if (deviceRPCRequestEntityList == null) {
\r
188 TR069EventProcessingException ex =
\r
189 new TR069EventProcessingException(ErrorCode.MISSING_OPERATION_DETAILS);
\r
190 logger.error(ex.getMessage());
\r
194 for (TR069DeviceRPCRequestEntity deviceRPCRequestEntity : deviceRPCRequestEntityList) {
\r
195 deviceRPCRequestEntity.setIsProcessed(Integer.valueOf(1));
\r
197 deviceRPCRequestRepository.saveAll(deviceRPCRequestEntityList);
\r
201 public static final Comparator<TR069DeviceRPCRequestEntity> idComparator =
\r
202 (TR069DeviceRPCRequestEntity e1, TR069DeviceRPCRequestEntity e2) -> e1.getId()
\r
203 .compareTo(e2.getId());
\r