From afa1b045ee250bfc5dc918ad7a69c8e5a62b67af Mon Sep 17 00:00:00 2001 From: hekeguang Date: Wed, 19 Feb 2020 17:13:41 +0800 Subject: Add processing code related to slice resource management Issue-ID: USECASEUI-369 Change-Id: Idc438d3ae83eaa3b4b2cf2e5336a1456ffdf1da6 Signed-off-by: hekeguang --- .../server/service/nsmf/ResourceMgtService.java | 51 ++ .../nsmf/impl/ResourceMgtServiceConvert.java | 594 ++++++++++++++ .../service/nsmf/impl/ResourceMgtServiceImpl.java | 863 +++++++++++++++++++++ 3 files changed, 1508 insertions(+) create mode 100644 server/src/main/java/org/onap/usecaseui/server/service/nsmf/ResourceMgtService.java create mode 100644 server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceConvert.java create mode 100644 server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceImpl.java diff --git a/server/src/main/java/org/onap/usecaseui/server/service/nsmf/ResourceMgtService.java b/server/src/main/java/org/onap/usecaseui/server/service/nsmf/ResourceMgtService.java new file mode 100644 index 00000000..71602247 --- /dev/null +++ b/server/src/main/java/org/onap/usecaseui/server/service/nsmf/ResourceMgtService.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2019 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.server.service.nsmf; + +import org.onap.usecaseui.server.bean.nsmf.common.ServiceResult; + +public interface ResourceMgtService { + + ServiceResult querySlicingBusiness(int pageNo, int pageSize); + + ServiceResult querySlicingBusinessByStatus(String processingStatus, int pageNo, int pageSize); + + ServiceResult querySlicingBusinessDetails(String businessId); + + ServiceResult queryNsiInstances(int pageNo, int pageSize); + + ServiceResult queryNsiInstancesByStatus(String instanceStatus, int pageNo, int pageSize); + + ServiceResult queryNsiDetails(String nsiId); + + ServiceResult queryNsiRelatedNssiInfo(String nsiId); + + ServiceResult queryNssiInstances(int pageNo, int pageSize); + + ServiceResult queryNssiInstancesByStatus(String instanceStatus, int pageNo, int pageSize); + + ServiceResult queryNssiInstancesByEnvironment(String environmentContext, int pageNo, int pageSize); + + ServiceResult queryNssiDetails(String nssiId); + + ServiceResult activateSlicingService(String serviceId); + + ServiceResult deactivateSlicingService(String serviceId); + + ServiceResult terminateSlicingService(String serviceId); + + ServiceResult queryOperationProgress(String serviceId); +} diff --git a/server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceConvert.java b/server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceConvert.java new file mode 100644 index 00000000..df7c2d1b --- /dev/null +++ b/server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceConvert.java @@ -0,0 +1,594 @@ +/* + * Copyright (C) 2019 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.server.service.nsmf.impl; + +import static org.onap.usecaseui.server.util.RestfulServices.create; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.beanutils.BeanUtils; +import org.onap.usecaseui.server.bean.nsmf.common.PagedResult; +import org.onap.usecaseui.server.bean.nsmf.resource.HostedBusinessInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.HostedNsiInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.HostedNsiList; +import org.onap.usecaseui.server.bean.nsmf.resource.IncludedNssiInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiDetailList; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiRelatedNssiInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiServiceInstanceInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiServiceInstanceList; +import org.onap.usecaseui.server.bean.nsmf.resource.NssiServiceInstanceInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.NssiServiceInstanceList; +import org.onap.usecaseui.server.bean.nsmf.resource.SlicingBusinessDetails; +import org.onap.usecaseui.server.bean.nsmf.resource.SlicingBusinessInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.SlicingBusinessList; +import org.onap.usecaseui.server.bean.nsmf.resource.SubscriberInfo; +import org.onap.usecaseui.server.bean.nsmf.task.BusinessDemandInfo; +import org.onap.usecaseui.server.bean.nsmf.task.NstInfo; +import org.onap.usecaseui.server.constant.nsmf.NsmfParamConstant; +import org.onap.usecaseui.server.service.slicingdomain.aai.AAISliceService; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIService; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIServiceAndInstance; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIServiceNST; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIServiceProfiles; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIServiceRsp; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.Relationship; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.RelationshipData; +import org.onap.usecaseui.server.service.slicingdomain.so.SOSliceService; +import org.onap.usecaseui.server.service.slicingdomain.so.bean.SOOperation; +import org.onap.usecaseui.server.util.RestfulServices; +import org.onap.usecaseui.server.util.nsmf.NsmfCommonUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import retrofit2.Response; + +public class ResourceMgtServiceConvert { + + private static final Logger logger = LoggerFactory.getLogger(ResourceMgtServiceConvert.class); + GeneralConvertImpl generalConvert = new GeneralConvertImpl(); + private SOSliceService soSliceService; + private AAISliceService aaiSliceService; + Gson gson = new Gson(); + + public ResourceMgtServiceConvert() { + this(RestfulServices.create(SOSliceService.class), RestfulServices.create(AAISliceService.class)); + } + + public ResourceMgtServiceConvert(SOSliceService soSliceService, AAISliceService aaiSliceService) { + this.soSliceService = soSliceService; + this.aaiSliceService = aaiSliceService; + } + + void convertSlicingBusinessList(SlicingBusinessList slicingBusinessList, AAIServiceRsp aAIServiceRsp, int pageNo, + int pageSize) + throws InvocationTargetException, IllegalAccessException, IOException { + if (aAIServiceRsp.getaAIService() == null || aAIServiceRsp.getaAIService().size() == 0) { + logger.error("convertSlicingBusinessList:aAIServiceRsp.getaAIService() is null or size is 0"); + return; + } + + List slicingBusinessInfoList = new ArrayList<>(); + for (AAIService aaiServiceInstance : aAIServiceRsp.getaAIService()) { + SlicingBusinessInfo slicingBusinessInfo = new SlicingBusinessInfo(); + BeanUtils.copyProperties(slicingBusinessInfo, aaiServiceInstance); + slicingBusinessInfoList.add(slicingBusinessInfo); + } + PagedResult pagedOrderList = NsmfCommonUtil.getPagedList(slicingBusinessInfoList, pageNo, pageSize); + slicingBusinessList.setSlicingBusinessInfoList(pagedOrderList.getPagedList()); + slicingBusinessList.setRecordNumber(slicingBusinessInfoList.size()); + } + + void convertBusinessDetails(String businessId, SlicingBusinessDetails slicingBusinessDetails, + AAIServiceAndInstance aaiServiceAndInstance) + throws InvocationTargetException, IllegalAccessException, IOException { + convertBusinessProfileDetails(businessId, slicingBusinessDetails, aaiServiceAndInstance); + + String nsiId = getNsiIdByBusiness(businessId); + NstInfo nstInfo = new NstInfo(); + getNstInfoByBusiness(nstInfo, nsiId); + slicingBusinessDetails.setNstInfo(nstInfo); + + NsiInfo nsiInfo = new NsiInfo(); + getNsiInfoByBusiness(nsiInfo, nsiId); + slicingBusinessDetails.setNsiInfo(nsiInfo); + + } + + void getNsiInfoByBusiness(NsiInfo nsiInfo, String nsiId) { + try { + // TODO + AAIServiceAndInstance aaiServiceAndInstance = new AAIServiceAndInstance(); + Response response = this.aaiSliceService + .listServiceById(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, nsiId) + .execute(); + if (response.isSuccessful()) { + logger.info("getNsiInfoByBusiness:listServiceById reponse is:{}", response.body()); + JSONObject object = response.body(); + aaiServiceAndInstance = generalConvert.listServiceByIdUtil(object); + nsiInfo.setNsiId(aaiServiceAndInstance.getServiceInstanceId()); + nsiInfo.setNsiName(aaiServiceAndInstance.getServiceInstanceName()); + nsiInfo.setNsiOrchestrationStatus(aaiServiceAndInstance.getOrchestrationStatus()); + nsiInfo.setNsiType(aaiServiceAndInstance.getServiceType()); + } else { + logger.error(String + .format("getNsiInfoByBusiness: Can not get listServiceById [code={}, message={}]", response.code(), + response.message())); + return; + } + } catch (Exception e) { + logger.error(e.getMessage()); + return; + } + } + + void getNstInfoByBusiness(NstInfo nstInfo, String nsiId) + throws IOException { + String modelInvariantId; + String modelVersionId; + try { + // TODO + Response response = this.aaiSliceService.querySerAndSubInsByNSI(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G, nsiId).execute(); + if (response.isSuccessful()) { + JSONObject object = response.body(); + logger.info("getNstInfoByBusiness: querySerAndSubInsByNSI reponse is:{}", response.body()); + AAIServiceAndInstance aaiNsi = queryNsiDetailsUtils(object); + HostedNsiInfo hostedNsiInfo = new HostedNsiInfo(); + modelInvariantId = aaiNsi.getModelInvariantId(); + modelVersionId = aaiNsi.getModelVersionId(); + } else { + logger.error(String + .format("getNstInfoByBusiness: Can not get listServiceById [code={}, message={}]", response.code(), + response.message())); + return; + } + } catch (Exception e) { + logger.error(e.getMessage()); + return; + } + + try { + // TODO + Response nstResponse = this.aaiSliceService.queryServiceNST(modelInvariantId, modelVersionId) + .execute(); + if (nstResponse.isSuccessful()) { + AAIServiceNST aaiServiceNST = nstResponse.body(); + logger.info("getNstInfoByBusiness: queryServiceNST reponse is:{}", gson.toJson(aaiServiceNST)); + nstInfo.setNstId(aaiServiceNST.getModelVersionId()); + nstInfo.setNstName(aaiServiceNST.getModelName()); + } else { + logger.error(String.format("Can not get queryServiceNST [code={}, message={}]", nstResponse.code(), + nstResponse.message())); + return; + } + } catch (Exception e) { + logger.error(e.getMessage()); + return; + } + } + + String getNsiIdByBusiness(String businessId) + throws IOException { + List aaiServiceAndInstanceList = new ArrayList<>(); + try { + // TODO + Response response = this.aaiSliceService.queryAllottedResources(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G, businessId).execute(); + if (response.isSuccessful()) { + logger.info("getNsiIdByBusiness: queryAllottedResources response is: {}", response.body()); + JSONObject object = response.body(); + aaiServiceAndInstanceList = queryAllottedResourceUtil(object); + + AAIServiceAndInstance aaiServiceAndInstance = aaiServiceAndInstanceList.get(0); + Relationship relationship = aaiServiceAndInstance.getRelationshipList().get(0); + List relationshipDataList = relationship.getRelationshipData(); + for (RelationshipData relationshipData : relationshipDataList) { + if (relationshipData.getRelationshipKey() + .equals(NsmfParamConstant.SERVICE_INSTANCE_SERVICE_INSTANCE_ID)) { + String nsiId = relationshipData.getRelationshipValue(); + return nsiId; + } + } + + } else { + logger.error(String + .format("getNsiIdByBusiness: Can not get queryAllottedResources[code={}, message={}]", + response.code(), + response.message())); + return ""; + } + } catch (Exception e) { + logger.error(e.getMessage()); + return ""; + } + return ""; + } + + void convertBusinessProfileDetails(String businessId, SlicingBusinessDetails slicingBusinessDetails, + AAIServiceAndInstance aaiServiceAndInstance) + throws InvocationTargetException, IllegalAccessException, IOException { + + BusinessDemandInfo businessDemandInfo = new BusinessDemandInfo(); + businessDemandInfo.setServiceName(aaiServiceAndInstance.getServiceInstanceName()); + businessDemandInfo.setServiceSnssai(aaiServiceAndInstance.getEnvironmentContext()); + + AAIServiceProfiles aaiServiceProfiles = new AAIServiceProfiles(); + try { + // TODO + Response response = this.aaiSliceService.getServiceProfiles(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G, businessId).execute(); + + if (response.isSuccessful()) { + logger.info("convertBusinessProfileDetails:getServiceProfiles is:{}", response.body()); + JSONObject object = response.body(); + if (object.containsKey("service-profile")) { + JSONArray array = object.getJSONArray("service-profile"); + // return normal result code + JSONObject objectProfile = array.getJSONObject(0); + aaiServiceProfiles = objectProfile + .parseObject(objectProfile.toString(), AAIServiceProfiles.class); + } else { + logger.error(String + .format("convertBusinessProfileDetails:Can not get getServiceProfiles[code={}, message={}]", + response.code(), + response.message())); + } + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + + String useInterval = generalConvert.getUseInterval(businessId); + businessDemandInfo.setUseInterval(useInterval); + BeanUtils.copyProperties(businessDemandInfo, aaiServiceProfiles); + List areaInfoList = generalConvert.getAreaTaList(aaiServiceProfiles.getCoverageAreaTAList()); + businessDemandInfo.setCoverageAreaTaList(areaInfoList); + slicingBusinessDetails.setBusinessDemandInfo(businessDemandInfo); + } + + void convertHostedNsiList(NsiServiceInstanceList nsiServiceInstanceList, AAIServiceRsp aAIServiceRsp, int pageNo, + int pageSize) + throws InvocationTargetException, IllegalAccessException { + + if (aAIServiceRsp.getaAIService() == null || aAIServiceRsp.getaAIService().size() == 0) { + logger.error("convertHostedNsiList:aAIServiceRsp.getaAIService() is null or size is 0"); + return; + } + int i = 0; + List nsiServiceInstanceInfoList = new ArrayList<>(); + for (AAIService aaiServiceInstance : aAIServiceRsp.getaAIService()) { + i++; + NsiServiceInstanceInfo nsiServiceInstanceInfo = new NsiServiceInstanceInfo(); + nsiServiceInstanceInfo.setServiceInstanceOrder(String.valueOf(i)); + nsiServiceInstanceInfo.setOrchestrationStatus(aaiServiceInstance.getOrchestrationStatus()); + nsiServiceInstanceInfo.setServiceInstanceId(aaiServiceInstance.getServiceInstanceId()); + nsiServiceInstanceInfo.setServiceInstanceName(aaiServiceInstance.getServiceInstanceName()); + nsiServiceInstanceInfo.setServiceType(aaiServiceInstance.getServiceType()); + + nsiServiceInstanceInfoList.add(nsiServiceInstanceInfo); + } + + PagedResult pagedOrderList = NsmfCommonUtil.getPagedList(nsiServiceInstanceInfoList, pageNo, pageSize); + nsiServiceInstanceList.setNsiServiceInstanceInfoList(pagedOrderList.getPagedList()); + nsiServiceInstanceList.setRecordNumber(nsiServiceInstanceInfoList.size()); + } + + void convertNsiDetailList(NsiDetailList nsiDetailList, AAIServiceAndInstance aaiServiceAndInstance) + throws IllegalAccessException, IOException, InvocationTargetException { + + List businessIdList = new ArrayList<>(); + List nssiIdList = new ArrayList<>(); + getBusinessAndNssiIds(aaiServiceAndInstance, businessIdList, nssiIdList); + + List hostedBusinessInfoList = new ArrayList<>(); + getHostedBusinessInfoList(hostedBusinessInfoList, businessIdList); + nsiDetailList.setHostedBusinessInfoList(hostedBusinessInfoList); + + List includedNssiInfoList = new ArrayList<>(); + getIncludedNssiInfoList(includedNssiInfoList, nssiIdList); + nsiDetailList.setIncludedNssiInfoList(includedNssiInfoList); + + } + + void getIncludedNssiInfoList(List includedNssiInfoList, List nssiIdList) + throws IOException, InvocationTargetException, IllegalAccessException { + int i = 0; + for (String nssiId : nssiIdList) { + i++; + try { + // TODO + AAIServiceAndInstance aaiServiceAndInstance = new AAIServiceAndInstance(); + Response response = this.aaiSliceService + .listServiceById(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, nssiId) + .execute(); + if (response.isSuccessful()) { + logger.info("getIncludedNssiInfoList:listServiceById reponse is:{}", response.body()); + JSONObject object = response.body(); + aaiServiceAndInstance = generalConvert.listServiceByIdUtil(object); + IncludedNssiInfo includedNssiInfo = new IncludedNssiInfo(); + BeanUtils.copyProperties(includedNssiInfo, aaiServiceAndInstance); + includedNssiInfo.setServiceInstanceId(nssiId); + includedNssiInfo.setServiceInstanceOrder(String.valueOf(i)); + includedNssiInfoList.add(includedNssiInfo); + + } else { + logger.error(String + .format("getIncludedNssiInfoList:Can not get listServiceById [code={}, message={}]", + response.code(), + response.message())); + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + + void getHostedBusinessInfoList(List hostedBusinessInfoList, List businessIdList) + throws IOException, InvocationTargetException, IllegalAccessException { + for (String businessId : businessIdList) { + try { + // TODO + // 添加给slicingTaskCreationProgress赋值的代码 + AAIServiceAndInstance aaiServiceAndInstance = new AAIServiceAndInstance(); + Response response = this.aaiSliceService + .listServiceById(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, businessId) + .execute(); + if (response.isSuccessful()) { + logger.info("getHostedBusinessInfoList: listServiceById reponse is:{}", response.body()); + JSONObject object = response.body(); + aaiServiceAndInstance = generalConvert.listServiceByIdUtil(object); + HostedBusinessInfo hostedBusinessInfo = new HostedBusinessInfo(); + BeanUtils.copyProperties(hostedBusinessInfo, aaiServiceAndInstance); + hostedBusinessInfo.setServiceInstanceId(businessId); + hostedBusinessInfoList.add(hostedBusinessInfo); + + } else { + logger.error(String + .format("getHostedBusinessInfoList: Can not get listServiceById [code={}, message={}]", + response.code(), + response.message())); + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + + void getBusinessAndNssiIds(AAIServiceAndInstance aaiServiceAndInstance, List businessIdList, + List nssiIdList) { + List relationshipList = aaiServiceAndInstance.getRelationshipList(); + if (relationshipList != null && relationshipList.size() > 0) { + for (Relationship relationship : relationshipList) { + if (relationship.getRelatedTo().equals(NsmfParamConstant.ALLOTTED_RESOURCE)) { + List relationshipDataList = relationship.getRelationshipData(); + for (RelationshipData relationshipData : relationshipDataList) { + if (relationshipData.getRelationshipKey() + .equals(NsmfParamConstant.SERVICE_INSTANCE_SERVICE_INSTANCE_ID)) { + businessIdList.add(relationshipData.getRelationshipValue()); + } + } + } + if (relationship.getRelatedTo().equals(NsmfParamConstant.SERVICE_INSTANCE)) { + List relationshipDataList = relationship.getRelationshipData(); + for (RelationshipData relationshipData : relationshipDataList) { + if (relationshipData.getRelationshipKey() + .equals(NsmfParamConstant.SERVICE_INSTANCE_SERVICE_INSTANCE_ID)) { + nssiIdList.add(relationshipData.getRelationshipValue()); + } + } + } + } + } + + } + + void convertNsiRelatedNssiInfo(NsiRelatedNssiInfo nsiRelatedNssiInfo, AAIServiceAndInstance aaiServiceAndInstance) + throws IllegalAccessException, IOException, InvocationTargetException { + + List nssiIdList = new ArrayList<>(); + List businessIdList = new ArrayList<>(); + getBusinessAndNssiIds(aaiServiceAndInstance, businessIdList, nssiIdList); + List includedNssiInfoList = new ArrayList<>(); + getIncludedNssiInfoList(includedNssiInfoList, nssiIdList); + getNsiRelatedNssiInfo(nsiRelatedNssiInfo, includedNssiInfoList); + + } + + void getNsiRelatedNssiInfo(NsiRelatedNssiInfo nsiRelatedNssiInfo, List includedNssiInfoList) { + for (IncludedNssiInfo includedNssiInfo : includedNssiInfoList) { + if (includedNssiInfo.getEnvironmentContext().equals(NsmfParamConstant.AN_NAME)) { + nsiRelatedNssiInfo.setAnSuggestNssiId(includedNssiInfo.getServiceInstanceId()); + nsiRelatedNssiInfo.setAnSuggestNssiName(includedNssiInfo.getServiceInstanceName()); + } + + if (includedNssiInfo.getEnvironmentContext().equals(NsmfParamConstant.TN_NAME)) { + nsiRelatedNssiInfo.setTnSuggestNssiId(includedNssiInfo.getServiceInstanceId()); + nsiRelatedNssiInfo.setTnSuggestNssiName(includedNssiInfo.getServiceInstanceName()); + } + + if (includedNssiInfo.getEnvironmentContext().equals(NsmfParamConstant.CN_NAME)) { + nsiRelatedNssiInfo.setCnSuggestNssiId(includedNssiInfo.getServiceInstanceId()); + nsiRelatedNssiInfo.setCnSuggestNssiName(includedNssiInfo.getServiceInstanceName()); + } + } + } + + void convertNssiServiceInstanceList(NssiServiceInstanceList nssiServiceInstanceList, + AAIServiceRsp aAIServiceRsp, + int pageNo, int pageSize) + throws InvocationTargetException, IllegalAccessException { + if (aAIServiceRsp.getaAIService() == null || aAIServiceRsp.getaAIService().size() == 0) { + logger.error("convertNssiServiceInstanceList: aAIServiceRsp.getaAIService() is null or size is 0"); + return; + } + + List nssiServiceInstanceInfoList = new ArrayList<>(); + int i = 0; + for (AAIService aaiService : aAIServiceRsp.getaAIService()) { + i++; + NssiServiceInstanceInfo nssiServiceInstanceInfo = new NssiServiceInstanceInfo(); + BeanUtils.copyProperties(nssiServiceInstanceInfo, aaiService); + nssiServiceInstanceInfo.setServiceInstanceOrder(String.valueOf(i)); + nssiServiceInstanceInfoList.add(nssiServiceInstanceInfo); + } + PagedResult pagedOrderList = NsmfCommonUtil.getPagedList(nssiServiceInstanceInfoList, pageNo, pageSize); + nssiServiceInstanceList.setNssiServiceInstanceInfoList(pagedOrderList.getPagedList()); + nssiServiceInstanceList.setRecordNumber(nssiServiceInstanceInfoList.size()); + } + + void convertNssiDetails(HostedNsiList hostedNsiList, AAIServiceAndInstance aaiServiceAndInstance) + throws InvocationTargetException, IllegalAccessException, IOException { + + List nsiIdList = new ArrayList<>(); + List emptyList = new ArrayList<>(); + getBusinessAndNssiIds(aaiServiceAndInstance, emptyList, nsiIdList); + List hostedNsiInfoList = new ArrayList<>(); + for (String nsiId : nsiIdList) { + try { + // TODO + Response response = this.aaiSliceService.querySerAndSubInsByNSI(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G, nsiId).execute(); + if (response.isSuccessful()) { + JSONObject object = response.body(); + logger.info("convertNssiDetails: querySerAndSubInsByNSI reponse is:{}", response.body()); + AAIServiceAndInstance aaiNssi = queryNsiDetailsUtils(object); + HostedNsiInfo hostedNsiInfo = new HostedNsiInfo(); + hostedNsiInfo.setServiceInstanceId(aaiNssi.getServiceInstanceId()); + hostedNsiInfo.setServiceInstanceName(aaiNssi.getServiceInstanceName()); + hostedNsiInfo.setServiceType(aaiNssi.getServiceType()); + hostedNsiInfo.setOrchestrationStatus(aaiNssi.getOrchestrationStatus()); + hostedNsiInfoList.add(hostedNsiInfo); + } else { + logger.error(String.format("convertNssiDetails: Can not get listServiceById [code={}, message={}]", + response.code(), + response.message())); + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + + hostedNsiList.setHostedNsiInfoList(hostedNsiInfoList); + hostedNsiList.setRecordNumber(hostedNsiInfoList.size()); + } + + SubscriberInfo buildSubscriberInfo(String globalSubscriberId, String serviceType) { + + SubscriberInfo subscriberInfo = new SubscriberInfo(); + subscriberInfo.setGlobalSubscriberId(globalSubscriberId); + subscriberInfo.setServiceType(serviceType); + return subscriberInfo; + } + + void buildAAIServiceRsp(AAIServiceRsp aAIServiceRsp, JSONArray array) { + List aaiserviceList = new ArrayList(); + for (int i = 0; i < array.size(); i++) { + JSONObject object = array.getJSONObject(i); + AAIService aaiService = new AAIService(); + aaiService.setServiceInstanceId(object.getString("service-instance-id")); + aaiService.setServiceInstanceName(object.getString("service-instance-name")); + aaiService.setServiceType(object.getString("service-type")); + aaiService.setEnvironmentContext(object.getString("environment-context")); + aaiService.setOrchestrationStatus(object.getString("orchestration-status")); + aaiserviceList.add(aaiService); + } + aAIServiceRsp.setaAIService(aaiserviceList); + } + + public AAIServiceAndInstance queryNsiDetailsUtils(JSONObject object) { + if (object.containsKey("relationship-list")) { + AAIServiceAndInstance aaiServiceAndInstance = new AAIServiceAndInstance(); + aaiServiceAndInstance.setServiceInstanceId(object.getString("service-instance-id")); + aaiServiceAndInstance.setServiceInstanceName(object.getString("service-instance-name")); + aaiServiceAndInstance.setModelInvariantId(object.getString("model-invariant-id")); + aaiServiceAndInstance.setModelVersionId(object.getString("model-version-id")); + aaiServiceAndInstance.setServiceType(object.getString("service-type")); + aaiServiceAndInstance.setOrchestrationStatus(object.getString("orchestration-status")); + + JSONArray array = object.getJSONObject("relationship-list").getJSONArray("relationship"); + List relationshipList = new ArrayList(); + for (int i = 0; i < array.size(); i++) { + + Relationship relationship = new Relationship(); + JSONObject objectShip = array.getJSONObject(i); + JSONArray arrayData = objectShip.getJSONArray("relationship-data"); + relationship.setRelatedTo(objectShip.getString("related-to")); + List RelationshipDataList = new ArrayList(); + for (int j = 0; j < arrayData.size(); j++) { + RelationshipData relationshipData = new RelationshipData(); + JSONObject objectData = arrayData.getJSONObject(j); + relationshipData.setRelationshipKey(objectData.getString("relationship-key")); + relationshipData.setRelationshipValue(objectData.getString("relationship-value")); + RelationshipDataList.add(relationshipData); + } + relationshipList.add(relationship); + relationship.setRelationshipData(RelationshipDataList); + + } + aaiServiceAndInstance.setRelationshipList(relationshipList); + return aaiServiceAndInstance; + } else { + return null; + } + } + + public List queryAllottedResourceUtil(JSONObject objectResource) { + JSONArray arrayResource = objectResource.getJSONArray("allotted-resource"); + if (arrayResource == null || arrayResource.size() == 0) { + logger.error("arrayResource is null or size is 0"); + return null; + } + + List aaiServiceAndInstanceList = new ArrayList(); + for (int i = 0; i < arrayResource.size(); i++) { + JSONObject object = arrayResource.getJSONObject(i); + if (object.containsKey("relationship-list")) { + AAIServiceAndInstance aaiServiceAndInstance = new AAIServiceAndInstance(); + JSONArray array = object.getJSONObject("relationship-list").getJSONArray("relationship"); + List relationshipList = new ArrayList(); + for (int j = 0; j < array.size(); j++) { + + Relationship relationship = new Relationship(); + JSONObject objectShip = array.getJSONObject(j); + JSONArray arrayData = objectShip.getJSONArray("relationship-data"); + relationship.setRelatedTo(objectShip.getString("related-to")); + List RelationshipDataList = new ArrayList(); + for (int h = 0; h < arrayData.size(); h++) { + RelationshipData relationshipData = new RelationshipData(); + JSONObject objectData = arrayData.getJSONObject(h); + relationshipData.setRelationshipKey(objectData.getString("relationship-key")); + relationshipData.setRelationshipValue(objectData.getString("relationship-value")); + RelationshipDataList.add(relationshipData); + } + relationshipList.add(relationship); + relationship.setRelationshipData(RelationshipDataList); + + } + aaiServiceAndInstance.setRelationshipList(relationshipList); + aaiServiceAndInstanceList.add(aaiServiceAndInstance); + } else { + return null; + } + } + return aaiServiceAndInstanceList; + } +} diff --git a/server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceImpl.java b/server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceImpl.java new file mode 100644 index 00000000..abb15a54 --- /dev/null +++ b/server/src/main/java/org/onap/usecaseui/server/service/nsmf/impl/ResourceMgtServiceImpl.java @@ -0,0 +1,863 @@ +/* + * Copyright (C) 2019 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.server.service.nsmf.impl; + + +import java.io.IOException; +import java.lang.reflect.Type; +import java.text.ParseException; +import java.util.List; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import javax.annotation.Resource; +import okhttp3.MediaType; +import okhttp3.RequestBody; +import org.onap.usecaseui.server.bean.ServiceInstanceOperations; +import org.onap.usecaseui.server.bean.nsmf.common.ResultHeader; +import org.onap.usecaseui.server.bean.nsmf.common.ServiceResult; +import org.onap.usecaseui.server.bean.nsmf.resource.HostedNsiList; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiDetailList; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiRelatedNssiInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.NsiServiceInstanceList; +import org.onap.usecaseui.server.bean.nsmf.resource.NssiServiceInstanceList; +import org.onap.usecaseui.server.bean.nsmf.resource.ServiceOperationProgress; +import org.onap.usecaseui.server.bean.nsmf.resource.ServiceOperationResult; +import org.onap.usecaseui.server.bean.nsmf.resource.SlicingBusinessDetails; +import org.onap.usecaseui.server.bean.nsmf.resource.SlicingBusinessInfo; +import org.onap.usecaseui.server.bean.nsmf.resource.SlicingBusinessList; +import org.onap.usecaseui.server.bean.nsmf.resource.SubscriberInfo; +import org.onap.usecaseui.server.constant.CommonConstant; +import org.onap.usecaseui.server.constant.nsmf.NsmfCodeConstant; +import org.onap.usecaseui.server.constant.nsmf.NsmfParamConstant; +import org.onap.usecaseui.server.service.lcm.ServiceLcmService; +import org.onap.usecaseui.server.service.nsmf.ResourceMgtService; +import org.onap.usecaseui.server.service.slicingdomain.aai.AAISliceService; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIServiceAndInstance; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIServiceInstance; +import org.onap.usecaseui.server.service.slicingdomain.aai.bean.AAIServiceRsp; +import org.onap.usecaseui.server.service.slicingdomain.so.SOSliceService; +import org.onap.usecaseui.server.service.slicingdomain.so.bean.ActivateService; +import org.onap.usecaseui.server.service.slicingdomain.so.bean.SOOperation; +import org.onap.usecaseui.server.util.DateUtils; +import org.onap.usecaseui.server.util.RestfulServices; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.stereotype.Service; +import retrofit2.Response; + +@Service("ResourceMgtService") +@org.springframework.context.annotation.Configuration +@EnableAspectJAutoProxy +public class ResourceMgtServiceImpl implements ResourceMgtService { + + private static final Logger logger = LoggerFactory.getLogger(ResourceMgtServiceImpl.class); + @Resource(name = "ServiceLcmService") + private ServiceLcmService serviceLcmService; + + private ResourceMgtServiceConvert resourceMgtServiceConvert = new ResourceMgtServiceConvert(); + GeneralConvertImpl generalConvert = new GeneralConvertImpl(); + + private AAISliceService aaiSliceService; + private SOSliceService soSliceService; + Gson gson = new Gson(); + + public ResourceMgtServiceImpl() { + this(RestfulServices.create(AAISliceService.class), RestfulServices.create(SOSliceService.class)); + } + + public ResourceMgtServiceImpl(AAISliceService aaiSliceService, SOSliceService soSliceService) { + this.aaiSliceService = aaiSliceService; + this.soSliceService = soSliceService; + } + + @Override + public ServiceResult querySlicingBusiness(int pageNo, int pageSize) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + SlicingBusinessList slicingBusinessList = new SlicingBusinessList(); + AAIServiceRsp aAIServiceRsp = new AAIServiceRsp(); + String resultMsg; + + try { + // TODO + Response response = this.aaiSliceService + .listService(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G).execute(); + if (response.isSuccessful()) { + logger.info("querySlicingBusiness: listService reponse is:{}", response.body()); + Type type = new TypeToken>() { + }.getType(); + + JSONArray array = response.body().getJSONArray("service-instance"); + resourceMgtServiceConvert.buildAAIServiceRsp(aAIServiceRsp, array); + resourceMgtServiceConvert.convertSlicingBusinessList(slicingBusinessList, + aAIServiceRsp, pageNo, pageSize); + addBusinessProgress(slicingBusinessList); + // return normal result code + resultMsg = "5G slicing business instances query result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String.format("querySlicingBusiness: Can not get slicingBusinessList[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing task result query failed!"; + if (response.code() == NsmfCodeConstant.RESOURCE_NOT_FOUND_CODE){ + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + }else { + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } + } catch (Exception e) { + resultMsg = "5G slicing business instances query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("querySlicingBusiness: 5G slicing business instances query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(slicingBusinessList); + return serviceResult; + } + + public void addBusinessProgress(SlicingBusinessList slicingBusinessList) { + if (slicingBusinessList.getSlicingBusinessInfoList() == null + || slicingBusinessList.getSlicingBusinessInfoList().size() == 0) { + logger.error( + "addBusinessProgress: slicingBusinessList.getSlicingBusinessInfoList() is null or slicingBusinessList.getSlicingBusinessInfoList() size is 0."); + return; + } + + for (SlicingBusinessInfo slicingBusinessInfo : slicingBusinessList.getSlicingBusinessInfoList()) { + String businessId = slicingBusinessInfo.getServiceInstanceId(); + ServiceInstanceOperations serviceInstanceOperations = serviceLcmService + .getServiceInstanceOperationById(businessId); + if (null == serviceInstanceOperations || serviceInstanceOperations.getOperationId() == null) { + logger.error( + "addBusinessProgress: null == serviceInstanceOperations for businessId:{}.", + businessId); + continue; + } + String operationId = serviceInstanceOperations.getOperationId(); + Response response = null; + try { + response = this.soSliceService.queryOperationProgress(businessId, operationId) + .execute(); + if (response.isSuccessful()) { + SOOperation soOperation = response.body(); + Gson gson = new Gson(); + logger.info("addBusinessProgress: queryOperationProgress reponse is:{}", + gson.toJson(soOperation).toString()); + if (soOperation == null || soOperation.getOperation() == null) { + logger.error("addBusinessProgress: soOperation is null or getOperation() is null for businessId {}!", businessId); + continue; + } + String operationResult = soOperation.getOperation().getResult(); + String operationType = soOperation.getOperation().getOperation(); + int progress = soOperation.getOperation().getProgress(); + logger.info("addBusinessProgress: operationResult is:{}, operationType is {}, progress is {}", + operationResult, operationType, progress); + if (operationResult.equals(NsmfCodeConstant.OPERATION_ERROR_STATUS)) { + logger.error("addBusinessProgress: progress is ok, but operationResult is error for businessId {}!", businessId); + continue; + } + slicingBusinessInfo.setLastOperationType(operationType); + slicingBusinessInfo.setLastOperationProgress(String.valueOf(progress)); + } + } catch (IOException e) { + logger.error(e.getMessage()); + logger.error("addBusinessProgress: catch an IOException for businessId {}!", businessId); + continue; + } + } + } + + @Override + public ServiceResult querySlicingBusinessByStatus(String processingStatus, int pageNo, int pageSize) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + SlicingBusinessList slicingBusinessList = new SlicingBusinessList(); + String resultMsg; + AAIServiceRsp aAIServiceRsp = new AAIServiceRsp(); + try { + // TODO + Response response = this.aaiSliceService.listServiceByStatus( + NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, processingStatus).execute(); + if (response.isSuccessful()) { + logger.info("querySlicingBusinessByStatus: listServiceByStatus reponse is:{}", response.body()); + JSONArray array = response.body().getJSONArray("service-instance"); + resourceMgtServiceConvert.buildAAIServiceRsp(aAIServiceRsp, array); + resourceMgtServiceConvert.convertSlicingBusinessList(slicingBusinessList, + aAIServiceRsp, pageNo, pageSize); + addBusinessProgress(slicingBusinessList); + // return normal result code + resultMsg = "5G slicing business instances query based on status result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("querySlicingBusinessByStatus: Can not get slicingBusinessList[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing task result query based on status failed!"; + if (response.code() == NsmfCodeConstant.RESOURCE_NOT_FOUND_CODE){ + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + }else { + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } + } catch (Exception e) { + resultMsg = "5G slicing business instances query based on status failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info( + "querySlicingBusinessByStatus: 5G slicing business instances query based on status has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(slicingBusinessList); + return serviceResult; + } + + @Override + public ServiceResult querySlicingBusinessDetails(String businessId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + AAIServiceAndInstance aaiServiceAndInstance = new AAIServiceAndInstance(); + SlicingBusinessDetails slicingBusinessDetails = new SlicingBusinessDetails(); + String resultMsg; + + try { + // TODO + Response response = this.aaiSliceService + .listServiceById(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, businessId) + .execute(); + if (response.isSuccessful()) { + logger.info("querySlicingBusinessDetails: listServiceById reponse is:{}", response.body()); + JSONObject object = response.body(); + aaiServiceAndInstance = generalConvert.listServiceByIdUtil(object); + resourceMgtServiceConvert.convertBusinessDetails(businessId, + slicingBusinessDetails, aaiServiceAndInstance); + resultMsg = "5G slicing business details query result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("querySlicingBusinessDetails: Can not get AAIServiceInstance[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing business details query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } catch (Exception e) { + resultMsg = "5G slicing business details query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("querySlicingBusinessDetails: 5G slicing business details query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(slicingBusinessDetails); + return serviceResult; + } + + @Override + public ServiceResult queryNsiInstances(int pageNo, int pageSize) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + NsiServiceInstanceList nsiServiceInstanceList = new NsiServiceInstanceList(); + AAIServiceRsp aAIServiceRsp = new AAIServiceRsp(); + + String resultMsg; + try { + // TODO + Response response = this.aaiSliceService + .listServiceNSI(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G).execute(); + if (response.isSuccessful()) { + logger.info("queryNsiInstances: listServiceNSI reponse is:{}", response.body()); + JSONArray array = response.body().getJSONArray("service-instance"); + resourceMgtServiceConvert.buildAAIServiceRsp(aAIServiceRsp, array); + resourceMgtServiceConvert.convertHostedNsiList(nsiServiceInstanceList, aAIServiceRsp, + pageNo, pageSize); + resultMsg = "5G slicing NSI service instances query result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String.format("queryNsiInstances: Can not get AAIServiceInstanceRsp[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing NSI service instances query failed!"; + if (response.code() == NsmfCodeConstant.RESOURCE_NOT_FOUND_CODE){ + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + }else { + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } + } catch (Exception e) { + resultMsg = "5G slicing NSI service instances query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("queryNsiInstances: 5G slicing NSI service instances query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(nsiServiceInstanceList); + return serviceResult; + } + + @Override + public ServiceResult queryNsiInstancesByStatus(String instanceStatus, int pageNo, int pageSize) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + NsiServiceInstanceList nsiServiceInstanceList = new NsiServiceInstanceList(); + AAIServiceRsp aAIServiceRsp = new AAIServiceRsp(); + String resultMsg; + + try { + // TODO + Response response = this.aaiSliceService.listServiceNSIByStatus( + NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, instanceStatus).execute(); + if (response.isSuccessful()) { + logger.info("queryNsiInstancesByStatus: listServiceNSIByStatus reponse is:{}", response.body()); + JSONArray array = response.body().getJSONArray("service-instance"); + resourceMgtServiceConvert.buildAAIServiceRsp(aAIServiceRsp, array); + resourceMgtServiceConvert.convertHostedNsiList(nsiServiceInstanceList, aAIServiceRsp, + pageNo, pageSize); + resultMsg = "5G slicing NSI service instances based on status result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("queryNsiInstancesByStatus: Can not get AAIServiceInstanceRsp[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing NSI service instances based on status query failed!"; + if (response.code() == NsmfCodeConstant.RESOURCE_NOT_FOUND_CODE){ + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + }else { + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } + } catch (Exception e) { + resultMsg = "5G slicing NSI service instances based on status query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info( + "queryNsiInstancesByStatus: 5G slicing NSI service instances based on status query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(nsiServiceInstanceList); + return serviceResult; + } + + + @Override + public ServiceResult queryNsiDetails(String serviceInstanceId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + NsiDetailList nsiDetailList = new NsiDetailList(); + String resultMsg; + + try { + // TODO + Response response = this.aaiSliceService.querySerAndSubInsByNSI(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G, serviceInstanceId).execute(); + if (response.isSuccessful()) { + JSONObject object = response.body(); + logger.info("queryNsiDetails: querySerAndSubInsByNSI reponse is:{}", response.body()); + AAIServiceAndInstance aaiServiceAndInstance = resourceMgtServiceConvert.queryNsiDetailsUtils(object); + resourceMgtServiceConvert.convertNsiDetailList(nsiDetailList, + aaiServiceAndInstance); + resultMsg = "5G slicing business details query result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("queryNsiDetails: Can not get AAIServiceAndInstance[code={}, message={}]", response.code(), + response.message())); + resultMsg = "5G slicing business details query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } catch (Exception e) { + resultMsg = "5G slicing business details query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("queryNsiDetails: 5G slicing business details query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(nsiDetailList); + return serviceResult; + } + + @Override + public ServiceResult queryNsiRelatedNssiInfo(String nsiId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + NsiRelatedNssiInfo nsiRelatedNssiInfo = new NsiRelatedNssiInfo(); + String resultMsg; + try { + // TODO + Response response = this.aaiSliceService + .querySerAndSubInsByNSI(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, nsiId) + .execute(); + if (response.isSuccessful()) { + JSONObject object = response.body(); + logger.info("queryNsiRelatedNssiInfo: querySerAndSubInsByNSI reponse is:{}", response.body()); + AAIServiceAndInstance aaiServiceAndInstance = resourceMgtServiceConvert.queryNsiDetailsUtils(object); + resourceMgtServiceConvert.convertNsiRelatedNssiInfo(nsiRelatedNssiInfo, + aaiServiceAndInstance); + resultMsg = "NSSI associated with NSI result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("queryNsiRelatedNssiInfo: Can not get AAIServiceAndInstance[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "NSSI associated with NSI result query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } catch (Exception e) { + resultMsg = "NSSI associated with NSI query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("queryNsiRelatedNssiInfo: NSSI associated with NSI query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(nsiRelatedNssiInfo); + return serviceResult; + } + + @Override + public ServiceResult queryNssiInstances(int pageNo, int pageSize) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + NssiServiceInstanceList nssiServiceInstanceList = new NssiServiceInstanceList(); + String resultMsg; + AAIServiceRsp aAIServiceRsp = new AAIServiceRsp(); + try { + // TODO + Response response = this.aaiSliceService + .listServiceNSSI(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G).execute(); + if (response.isSuccessful()) { + logger.info("queryNssiInstances: listServiceNSSI reponse is:{}", response.body()); + JSONArray array = response.body().getJSONArray("service-instance"); + resourceMgtServiceConvert.buildAAIServiceRsp(aAIServiceRsp, array); + resourceMgtServiceConvert + .convertNssiServiceInstanceList(nssiServiceInstanceList, aAIServiceRsp, pageNo, pageSize); + resultMsg = "5G slicing NSI service instances query result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String.format("queryNssiInstances: Can not get AAIServiceInstanceRsp[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing NSSI service instances result query failed!"; + if (response.code() == NsmfCodeConstant.RESOURCE_NOT_FOUND_CODE){ + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + }else { + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } + + } catch (Exception e) { + resultMsg = "5G slicing NSSI service instances query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("queryNssiInstances: 5G slicing NSSI service instances query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(nssiServiceInstanceList); + return serviceResult; + } + + @Override + public ServiceResult queryNssiInstancesByStatus(String instanceStatus, int pageNo, int pageSize) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + NssiServiceInstanceList nssiServiceInstanceList = new NssiServiceInstanceList(); + String resultMsg; + AAIServiceRsp aAIServiceRsp = new AAIServiceRsp(); + try { + // TODO + Response response = this.aaiSliceService.listServiceNSSIByStatus( + NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, instanceStatus).execute(); + if (response.isSuccessful()) { + logger.info("queryNssiInstancesByStatus: listServiceNSSIByStatus reponse is:{}", response.body()); + JSONArray array = response.body().getJSONArray("service-instance"); + resourceMgtServiceConvert.buildAAIServiceRsp(aAIServiceRsp, array); + resourceMgtServiceConvert + .convertNssiServiceInstanceList(nssiServiceInstanceList, aAIServiceRsp, pageNo, pageSize); + // return normal result code + resultMsg = "5G slicing NSSI service instances based on status result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("queryNssiInstancesByStatus: Can not get AAIServiceInstanceRsp[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing NSSI service instances based on status query failed!"; + if (response.code() == NsmfCodeConstant.RESOURCE_NOT_FOUND_CODE){ + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + }else { + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } + } catch (Exception e) { + resultMsg = "5G slicing NSSI service instances based on status query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info( + "queryNssiInstancesByStatus: 5G slicing NSSI service instances based on status query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(nssiServiceInstanceList); + return serviceResult; + } + + @Override + public ServiceResult queryNssiInstancesByEnvironment(String environmentContext, int pageNo, int pageSize) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + + NssiServiceInstanceList nssiServiceInstanceList = new NssiServiceInstanceList(); + String resultMsg; + AAIServiceRsp aAIServiceRsp = new AAIServiceRsp(); + try { + // TODO + Response response = this.aaiSliceService.listServiceNSSIByEnv(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G, environmentContext).execute(); + if (response.isSuccessful()) { + logger.info("queryNssiInstancesByEnvironment: listServiceNSSIByEnv reponse is:{}", response.body()); + JSONArray array = response.body().getJSONArray("service-instance"); + resourceMgtServiceConvert.buildAAIServiceRsp(aAIServiceRsp, array); + resourceMgtServiceConvert + .convertNssiServiceInstanceList(nssiServiceInstanceList, aAIServiceRsp, pageNo, pageSize); + resultMsg = "5G slicing NSSI query based on environment context result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("queryNssiInstancesByEnvironment: Can not get AAIServiceInstanceRsp[code={}, message={}]", + response.code(), + response.message())); + resultMsg = "5G slicing NSSI service instances based on environment query failed!"; + if (response.code() == NsmfCodeConstant.RESOURCE_NOT_FOUND_CODE){ + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + }else { + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } + } catch (Exception e) { + resultMsg = "5G slicing NSSI service instances based on environment query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info( + "queryNssiInstancesByEnvironment: 5G slicing NSSI service instances based on environment query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(nssiServiceInstanceList); + return serviceResult; + } + + @Override + public ServiceResult queryNssiDetails(String nssiId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + AAIServiceAndInstance aaiServiceAndInstance = new AAIServiceAndInstance(); + HostedNsiList hostedNsiList = new HostedNsiList(); + String resultMsg; + + try { + // TODO + Response response = this.aaiSliceService + .queryNSIByNSSI(NsmfParamConstant.CUSTOM_5G, NsmfParamConstant.SERVICE_TYPE_5G, nssiId).execute(); + if (response.isSuccessful()) { + logger.info("queryNssiDetails: queryNSIByNSSI reponse is:{}", response.body()); + JSONObject object = response.body(); + aaiServiceAndInstance = generalConvert.queryServiceUtil(object); + resourceMgtServiceConvert.convertNssiDetails(hostedNsiList, aaiServiceAndInstance); + resultMsg = "5G slicing service nssi details query result."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String + .format("queryNssiDetails: Can not get AAIServiceAndInstance[code={}, message={}]", response.code(), + response.message())); + resultMsg = "5G slicing service nssi details query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } catch (Exception e) { + resultMsg = "5G slicing service nssi details query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("queryNssiDetails: 5G slicing service nssi details query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(hostedNsiList); + return serviceResult; + } + + @Override + public ServiceResult activateSlicingService(String serviceId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + ServiceOperationResult serviceActiveResult = new ServiceOperationResult(); + String resultMsg; + + try { + // TODO + SubscriberInfo subscriberInfo = resourceMgtServiceConvert.buildSubscriberInfo(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G); + String jsonstr = JSON.toJSONString(subscriberInfo); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), jsonstr.toString()); + Response activeResponse = this.soSliceService.activeService(serviceId, requestBody) + .execute(); + + if (activeResponse.isSuccessful()) { + ActivateService activateService = activeResponse.body(); + logger.info("activateSlicingService: activeService reponse is:{}", + gson.toJson(activateService).toString()); + String operationId = activateService.getOperationId(); + serviceActiveResult.setOperationId(operationId); + ServiceInstanceOperations serviceOpera = new ServiceInstanceOperations(serviceId, operationId, + NsmfCodeConstant.ACTIVATE_TYPE, "0", CommonConstant.IN_PROGRESS_CODE, + DateUtils.dateToString(DateUtils.now()), null); + serviceLcmService.saveOrUpdateServiceInstanceOperation(serviceOpera); + resultMsg = "5G slicing service activated normally."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String.format("activateSlicingService: Can not get ActivateService[code={}, message={}]", + activeResponse.code(), + activeResponse.message())); + resultMsg = "5G slicing service activated failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } catch (Exception e) { + resultMsg = "5G slicing service activation failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("activateSlicingService: 5G slicing service activation has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(serviceActiveResult); + return serviceResult; + } + + @Override + public ServiceResult deactivateSlicingService(String serviceId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + ServiceOperationResult serviceDeactivateResult = new ServiceOperationResult(); + String resultMsg; + + try { + // TODO + SubscriberInfo subscriberInfo = resourceMgtServiceConvert.buildSubscriberInfo(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G); + String jsonstr = JSON.toJSONString(subscriberInfo); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), jsonstr.toString()); + Response activeResponse = this.soSliceService.deactiveService(serviceId, requestBody) + .execute(); + + if (activeResponse.isSuccessful()) { + ActivateService activateService = activeResponse.body(); + logger.info("deactivateSlicingService: deactiveService reponse is:{}", + gson.toJson(activateService).toString()); + String operationId = activateService.getOperationId(); + serviceDeactivateResult.setOperationId(operationId); + ServiceInstanceOperations serviceOpera = new ServiceInstanceOperations(serviceId, operationId, + NsmfCodeConstant.DEACTIVATE_TYPE, "0", CommonConstant.IN_PROGRESS_CODE, + DateUtils.dateToString(DateUtils.now()), null); + serviceLcmService.saveOrUpdateServiceInstanceOperation(serviceOpera); + resultMsg = "5G slicing service deactivated normally."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String.format("deactivateSlicingService: Can not get ActivateService[code={}, message={}]", + activeResponse.code(), + activeResponse.message())); + resultMsg = "5G slicing service deactivation failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } catch (Exception e) { + resultMsg = "5G slicing service deactivation failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("deactivateSlicingService: 5G slicing service deactivation has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(serviceDeactivateResult); + return serviceResult; + } + + @Override + public ServiceResult terminateSlicingService(String serviceId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + ServiceOperationResult serviceTerminateResult = new ServiceOperationResult(); + String resultMsg; + + try { + // TODO + SubscriberInfo subscriberInfo = resourceMgtServiceConvert.buildSubscriberInfo(NsmfParamConstant.CUSTOM_5G, + NsmfParamConstant.SERVICE_TYPE_5G); + String jsonstr = JSON.toJSONString(subscriberInfo); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), jsonstr.toString()); + Response activeResponse = this.soSliceService.terminateService(serviceId, requestBody) + .execute(); + + if (activeResponse.isSuccessful()) { + ActivateService activateService = activeResponse.body(); + logger.info("terminateSlicingService: terminateService reponse is:{}", + gson.toJson(activateService).toString()); + String operationId = activateService.getOperationId(); + serviceTerminateResult.setOperationId(activateService.getOperationId()); + ServiceInstanceOperations serviceOpera = new ServiceInstanceOperations(serviceId, operationId, + NsmfCodeConstant.DELETE_TYPE, "0", CommonConstant.IN_PROGRESS_CODE, + DateUtils.dateToString(DateUtils.now()), null); + serviceLcmService.saveOrUpdateServiceInstanceOperation(serviceOpera); + resultMsg = "5G slicing service terminated normally."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } else { + logger.error(String.format("terminateSlicingService: Can not get ActivateService[code={}, message={}]", + activeResponse.code(), + activeResponse.message())); + resultMsg = "5G slicing service termination failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } catch (Exception e) { + resultMsg = "5G slicing service termination failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("terminateSlicingService: 5G slicing service termination has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(serviceTerminateResult); + return serviceResult; + } + + @Override + public ServiceResult queryOperationProgress(String serviceId) { + ServiceResult serviceResult = new ServiceResult(); + ResultHeader resultHeader = new ResultHeader(); + ServiceOperationProgress operationProgress = new ServiceOperationProgress(); + String resultMsg = ""; + + try { + // TODO + ServiceInstanceOperations serviceInstanceOperations = serviceLcmService + .getServiceInstanceOperationById(serviceId); + if (serviceInstanceOperations != null) { + String operationId = serviceInstanceOperations.getOperationId(); + logger.info("queryOperationProgress: operationId is:{}", operationId); + Response response = this.soSliceService.queryOperationProgress(serviceId, operationId) + .execute(); + if (response.isSuccessful()) { + SOOperation soOperation = response.body(); + Gson gson = new Gson(); + logger.info("queryOperationProgress: queryOperationProgress reponse is:{}", + gson.toJson(soOperation).toString()); + if (soOperation == null || soOperation.getOperation() == null + || soOperation.getOperation().getOperation() == null) { + logger.error("queryOperationProgress: soOperation is null or getOperation() is null!"); + resultMsg = "5G slicing service operation progress query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } else { + String operationResult = soOperation.getOperation().getResult(); + String operationType = soOperation.getOperation().getOperation(); + int progress = soOperation.getOperation().getProgress(); + logger + .info("queryOperationProgress: operationResult is:{}, operationType is {}, progress is {}", + operationResult, operationType, String.valueOf(progress)); + if (operationResult.equals(NsmfCodeConstant.OPERATION_ERROR_STATUS)) { + logger.error("queryOperationProgress: operationResult is error"); + resultMsg = "5G slicing service operation progress query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } else { + // return normal result code + operationProgress.setOperationType(operationType); + operationProgress.setOperationProgress(String.valueOf(progress)); + resultMsg = "5G slicing service operation progress."; + resultHeader.setResult_code(NsmfCodeConstant.SUCCESS_CODE); + } + } + } else { + logger.error(String.format("Can not get SOOperation[code={}, message={}]", response.code(), + response.message())); + resultMsg = "5G slicing service operation progress query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + } else { + logger.error("queryOperationProgress: serviceInstanceOperations is null!"); + resultMsg = "5G slicing service operation progress query failed!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + } + + } catch (Exception e) { + resultMsg = "5G slicing service operation progress query failed. Unknown exception occurred!"; + resultHeader.setResult_code(NsmfCodeConstant.ERROR_CODE_UNKNOWN); + logger.error(e.getMessage()); + } + + logger.info(resultMsg); + logger.info("5G slicing service operation progress query has been finished."); + resultHeader.setResult_message(resultMsg); + serviceResult.setResult_header(resultHeader); + serviceResult.setResult_body(operationProgress); + return serviceResult; + } + +} -- cgit 1.2.3-korg