aboutsummaryrefslogtreecommitdiffstats
path: root/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/service/impl/IntentReportServiceImpl.java
blob: d4c0f88698e97000a814cc0a206c6836c9fc5b55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * Copyright (C) 2023 CMCC, Inc. and others. 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.
 */

package org.onap.usecaseui.intentanalysis.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.onap.usecaseui.intentanalysis.bean.models.FulfillmentInfo;
import org.onap.usecaseui.intentanalysis.bean.models.IntentReport;
import org.onap.usecaseui.intentanalysis.bean.models.ResultHeader;
import org.onap.usecaseui.intentanalysis.bean.models.ServiceResult;
import org.onap.usecaseui.intentanalysis.common.ResponseConsts;
import org.onap.usecaseui.intentanalysis.exception.DataBaseException;
import org.onap.usecaseui.intentanalysis.mapper.IntentReportFulfillmentInfoMapper;
import org.onap.usecaseui.intentanalysis.mapper.IntentReportMapper;
import org.onap.usecaseui.intentanalysis.mapper.ObjectInstanceMapper;
import org.onap.usecaseui.intentanalysis.service.FulfillmentInfoService;
import org.onap.usecaseui.intentanalysis.service.IntentInstanceService;
import org.onap.usecaseui.intentanalysis.service.IntentReportService;
import org.onap.usecaseui.intentanalysis.util.CommonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import static org.onap.usecaseui.intentanalysis.common.ResponseConsts.RSEPONSE_SUCCESS;

@Service
@Slf4j
public class IntentReportServiceImpl implements IntentReportService {

    @Autowired
    private FulfillmentInfoService fulfillmentInfoService;

    @Autowired
    private ObjectInstanceMapper objectInstanceMapper;

    @Autowired
    private IntentReportFulfillmentInfoMapper intentReportFulfillmentInfoMapper;

    @Autowired
    private IntentReportMapper intentReportMapper;

    @Autowired
    private IntentInstanceService intentInstanceService;

    @Override
    @Transactional(rollbackFor = DataBaseException.class)
    public ServiceResult getIntentReportByIntentId(String intentId) {
        FulfillmentInfo fulfillmentInfo = getFulfillmentInfo(intentId);

        if (fulfillmentInfo == null) {
            return new ServiceResult(new ResultHeader(RSEPONSE_SUCCESS, "The intent has not fulfillmentInfo"),
                    new IntentReport());
        }
        fulfillmentInfo.setObjectInstances(getInstances(intentId));
        IntentReport intentReport = new IntentReport();
        intentReport.setIntentReportId(CommonUtil.getUUid());
        intentReport.setIntentReference(intentInstanceService.queryIntentInstanceId(intentId));
        intentReport.setFulfillmentInfos(Collections.singletonList(fulfillmentInfo));
        intentReport.setReportTime(CommonUtil.getTime());

        saveIntentReport(intentReport, fulfillmentInfo);
        return new ServiceResult(new ResultHeader(RSEPONSE_SUCCESS, "Get report success"),
                intentReport);
    }

    /**
     * Generate intention reports on a regular basis and save them in the database
     *
     * @param intentId intentId
     */
    @Override
    @Transactional(rollbackFor = DataBaseException.class)
    public void saveIntentReportByIntentId(String intentId) {
        FulfillmentInfo fulfillmentInfo = fulfillmentInfoService.getFulfillmentInfo(intentId);
        if (fulfillmentInfo == null) {
            log.error("The fulfillmentInfo is null");
            return;
        }
        IntentReport intentReport = new IntentReport();
        intentReport.setIntentReportId(CommonUtil.getUUid());
        intentReport.setIntentReference(intentInstanceService.queryIntentInstanceId(intentId));
        intentReport.setReportTime(CommonUtil.getTime());
        saveIntentReport(intentReport, fulfillmentInfo);
    }

    @Override
    public List<String> getIntentReportIds(String intentReference) {
        List<String> intentReportIds = intentReportMapper.getIntentReportIds(intentReference);
        if (CollectionUtils.isEmpty(intentReportIds)) {
            log.error("get intentReportId is empty,intentReference is {}", intentReference);
        }
        return intentReportIds;
    }

    private FulfillmentInfo getFulfillmentInfo(String intentId) {
        FulfillmentInfo fulfillmentInfo = fulfillmentInfoService.getFulfillmentInfo(intentId);
        log.info("fulfillmentInfo is {}", fulfillmentInfo);
        if (fulfillmentInfo == null) {
            log.error("get fulfillmentInfo is failed,intentId is {}", intentId);
        }
        return fulfillmentInfo;
    }

    private List<String> getInstances(String intentId) {
        List<String> objectInstances = objectInstanceMapper.getObjectInstances(intentId);
        if (CollectionUtils.isEmpty(objectInstances)) {
            log.error("get objectInstance is failed,intentId is {}", intentId);
        }
        return objectInstances.stream().distinct().collect(Collectors.toList());
    }

    private void saveIntentReport(IntentReport intentReport, FulfillmentInfo fulfillmentInfo) {
        int num = intentReportMapper.insertIntentReport(intentReport);
        if (num < 1) {
            String msg = "Failed to insert intent report to database.";
            log.error(msg);
            throw new DataBaseException(msg, ResponseConsts.RET_INSERT_DATA_FAIL);
        }
        int fulfillmentNum = intentReportFulfillmentInfoMapper.insertIntentReportFulfillment(fulfillmentInfo, intentReport.getIntentReportId());
        if (fulfillmentNum < 1) {
            String msg = "Failed to insert fulfillmentInfo to database.";
            log.error(msg);
            throw new DataBaseException(msg, ResponseConsts.RET_INSERT_DATA_FAIL);
        }
    }
}