class BBInputSetup implements JavaDelegate {

    protected void populateVfModule(BBInputSetupParameter parameter) throws Exception {
        String vnfModelCustomizationUUID = null;
        String replaceVnfModelCustomizationUUID = null;
        if (parameter.getRelatedInstanceList() != null) {
            for (RelatedInstanceList relatedInstList : parameter.getRelatedInstanceList()) {
                RelatedInstance relatedInstance = relatedInstList.getRelatedInstance();
                if (relatedInstance.getModelInfo().getModelType().equals(ModelType.vnf)) {
                    if (parameter.getIsReplace()) {
                        replaceVnfModelCustomizationUUID = relatedInstance.getModelInfo().getModelCustomizationId();
                    } else {
                        vnfModelCustomizationUUID = relatedInstance.getModelInfo().getModelCustomizationId();
                    }
                }
                if (relatedInstance.getModelInfo().getModelType().equals(ModelType.volumeGroup)) {
                    parameter.getLookupKeyMap().put(ResourceKey.VOLUME_GROUP_ID, relatedInstance.getInstanceId());
                }
            }
        }
        GenericVnf vnf = null;
        for (GenericVnf tempVnf : parameter.getServiceInstance().getVnfs()) {
            if (tempVnf.getVnfId().equalsIgnoreCase(parameter.getLookupKeyMap().get(ResourceKey.GENERIC_VNF_ID))) {
                vnf = tempVnf;
                vnfModelCustomizationUUID =
                        this.bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId()).getModelCustomizationId();
                ModelInfo vnfModelInfo = new ModelInfo();
                if (parameter.getIsReplace()) {
                    vnfModelInfo.setModelCustomizationUuid(replaceVnfModelCustomizationUUID);
                    this.mapCatalogVnf(tempVnf, vnfModelInfo, parameter.getServiceModel().getNewService());
                } else {
                    vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
                    this.mapCatalogVnf(tempVnf, vnfModelInfo, parameter.getServiceModel().getCurrentService());
                }
                Optional<String> volumeGroupIdOp = getVolumeGroupIdRelatedToVfModule(tempVnf, parameter.getModelInfo(),
                        parameter.getCloudConfiguration().getCloudOwner(),
                        parameter.getCloudConfiguration().getLcpCloudRegionId(), parameter.getLookupKeyMap());
                if (volumeGroupIdOp.isPresent()) {
                    parameter.getLookupKeyMap().put(ResourceKey.VOLUME_GROUP_ID, volumeGroupIdOp.get());
                }
                break;
            }
        }
        if (vnf != null) {
            VfModule vfModule = null;
            for (VfModule vfModuleTemp : vnf.getVfModules()) {
                if (parameter.getLookupKeyMap().get(ResourceKey.VF_MODULE_ID) != null && vfModuleTemp.getVfModuleId()
                        .equalsIgnoreCase(parameter.getLookupKeyMap().get(ResourceKey.VF_MODULE_ID))) {
                    vfModule = vfModuleTemp;
                }
                String vfModuleCustId = bbInputSetupUtils.getAAIVfModule(vnf.getVnfId(), vfModuleTemp.getVfModuleId())
                        .getModelCustomizationId();
                ModelInfo modelInfoVfModule = new ModelInfo();
                modelInfoVfModule.setModelCustomizationId(vfModuleCustId);
                if (parameter.getIsReplace() && parameter.getLookupKeyMap().get(ResourceKey.VF_MODULE_ID) != null
                        && vfModuleTemp.getVfModuleId()
                                .equalsIgnoreCase(parameter.getLookupKeyMap().get(ResourceKey.VF_MODULE_ID))) {
                    mapCatalogVfModule(vfModuleTemp, modelInfoVfModule, parameter.getServiceModel().getNewService(),
                            replaceVnfModelCustomizationUUID);
                } else {
                    mapCatalogVfModule(vfModuleTemp, modelInfoVfModule, parameter.getServiceModel().getCurrentService(),
                            vnfModelCustomizationUUID);
                }
            }
            if (vfModule == null && parameter.getBbName().equalsIgnoreCase(AssignFlows.VF_MODULE.toString())) {
                vfModule = createVfModule(parameter.getLookupKeyMap(), parameter.getResourceId(),
                        parameter.getInstanceName(), parameter.getInstanceParams());
                vnf.getVfModules().add(vfModule);
                if (parameter.getIsReplace()) {
                    mapCatalogVfModule(vfModule, parameter.getModelInfo(), parameter.getServiceModel().getNewService(),
                            replaceVnfModelCustomizationUUID);
                } else {
                    mapCatalogVfModule(vfModule, parameter.getModelInfo(),
                            parameter.getServiceModel().getCurrentService(), vnfModelCustomizationUUID);
                }
            }
            if (vfModule.getModelInfoVfModule() != null && vfModule.getModelInfoVfModule().getModelName() != null
                    && vfModule.getModelInfoVfModule().getModelName().contains("helm")) {
                parameter.setIsHelm(true);
            }
        } else {
            logger.debug("Related VNF instance Id not found: {}",
                    parameter.getLookupKeyMap().get(ResourceKey.GENERIC_VNF_ID));
            throw new Exception("Could not find relevant information for related VNF");
        }
    }

}