public UserVmResponse newUserVmResponse()

in server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java [140:457]


    public UserVmResponse newUserVmResponse(ResponseView view, String objectName, UserVmJoinVO userVm, Set<VMDetails> details, Boolean accumulateStats, Boolean showUserData,
            Account caller) {
        UserVmResponse userVmResponse = new UserVmResponse();

        if (userVm.getHypervisorType() != null) {
            userVmResponse.setHypervisor(userVm.getHypervisorType().getHypervisorDisplayName());
        }
        userVmResponse.setId(userVm.getUuid());
        userVmResponse.setName(userVm.getName());

        if (userVm.getDisplayName() != null) {
            userVmResponse.setDisplayName(userVm.getDisplayName());
        } else {
            userVmResponse.setDisplayName(userVm.getName());
        }

        if (userVm.getAccountType() == Account.Type.PROJECT) {
            userVmResponse.setProjectId(userVm.getProjectUuid());
            userVmResponse.setProjectName(userVm.getProjectName());
        } else {
            userVmResponse.setAccountName(userVm.getAccountName());
        }

        User user = _userDao.getUser(userVm.getUserId());
        if (user != null) {
            userVmResponse.setUserId(user.getUuid());
            userVmResponse.setUserName(user.getUsername());
        }
        userVmResponse.setDomainId(userVm.getDomainUuid());
        userVmResponse.setDomainName(userVm.getDomainName());
        userVmResponse.setDomainPath(userVm.getDomainPath());

        userVmResponse.setCreated(userVm.getCreated());
        userVmResponse.setLastUpdated(userVm.getLastUpdated());
        userVmResponse.setDisplayVm(userVm.isDisplayVm());
        userVmResponse.setVmType(userVm.getUserVmType());

        if (userVm.getState() != null) {
            userVmResponse.setState(userVm.getState().toString());
        }
        userVmResponse.setHaEnable(userVm.isHaEnabled());
        if (details.contains(VMDetails.all) || details.contains(VMDetails.group)) {
            userVmResponse.setGroupId(userVm.getInstanceGroupUuid());
            userVmResponse.setGroup(userVm.getInstanceGroupName());
        }
        userVmResponse.setZoneId(userVm.getDataCenterUuid());
        userVmResponse.setZoneName(userVm.getDataCenterName());
        if (view == ResponseView.Full) {
            userVmResponse.setInstanceName(userVm.getInstanceName());
            userVmResponse.setHostId(userVm.getHostUuid());
            userVmResponse.setHostName(userVm.getHostName());
            userVmResponse.setArch(userVm.getArch());
        }
        if (userVm.getHostStatus() != null) {
            userVmResponse.setHostControlState(ControlState.getControlState(userVm.getHostStatus(), userVm.getHostResourceState()).toString());
        }

        if (details.contains(VMDetails.all) || details.contains(VMDetails.tmpl)) {
            userVmResponse.setTemplateId(userVm.getTemplateUuid());
            userVmResponse.setTemplateName(userVm.getTemplateName());
            userVmResponse.setTemplateDisplayText(userVm.getTemplateDisplayText());
            userVmResponse.setPasswordEnabled(userVm.isPasswordEnabled());
            userVmResponse.setTemplateType(userVm.getTemplateType().toString());
            userVmResponse.setTemplateFormat(userVm.getTemplateFormat().toString());
        }
        if (details.contains(VMDetails.all) || details.contains(VMDetails.iso)) {
            userVmResponse.setIsoId(userVm.getIsoUuid());
            userVmResponse.setIsoName(userVm.getIsoName());
            userVmResponse.setIsoDisplayText(userVm.getIsoDisplayText());
        }
        if (details.contains(VMDetails.all) || details.contains(VMDetails.servoff)) {
            userVmResponse.setServiceOfferingId(userVm.getServiceOfferingUuid());
            userVmResponse.setServiceOfferingName(userVm.getServiceOfferingName());
        }
        if (details.contains(VMDetails.all) || details.contains(VMDetails.diskoff)) {
            DiskOfferingVO diskOfferingVO = ApiDBUtils.findDiskOfferingById(userVm.getDiskOfferingId());
            if (diskOfferingVO != null) {
                userVmResponse.setDiskOfferingId(userVm.getDiskOfferingUuid());
                userVmResponse.setDiskOfferingName(userVm.getDiskOfferingName());
            }
        }
        if (details.contains(VMDetails.all) || details.contains(VMDetails.backoff)) {
            userVmResponse.setBackupOfferingId(userVm.getBackupOfferingUuid());
            userVmResponse.setBackupOfferingName(userVm.getBackupOfferingName());
        }
        if (details.contains(VMDetails.all) || details.contains(VMDetails.servoff) || details.contains(VMDetails.stats)) {
            userVmResponse.setCpuNumber(userVm.getCpu());
            userVmResponse.setCpuSpeed(userVm.getSpeed());
            userVmResponse.setMemory(userVm.getRamSize());
            ServiceOfferingDetailsVO serviceOfferingDetail = ApiDBUtils.findServiceOfferingDetail(userVm.getServiceOfferingId(), GPU.Keys.vgpuType.toString());
            if (serviceOfferingDetail != null) {
                userVmResponse.setVgpu(serviceOfferingDetail.getValue());
            }
        }
        userVmResponse.setGuestOsId(userVm.getGuestOsUuid());
        if (details.contains(VMDetails.all) || details.contains(VMDetails.volume)) {
            userVmResponse.setRootDeviceId(userVm.getVolumeDeviceId());
            if (userVm.getVolumeType() != null) {
                userVmResponse.setRootDeviceType(userVm.getVolumeType().toString());
            }
        }
        userVmResponse.setPassword(userVm.getPassword());
        if (userVm.getJobId() != null) {
            userVmResponse.setJobId(userVm.getJobUuid());
            userVmResponse.setJobStatus(userVm.getJobStatus());
        }
        //userVmResponse.setForVirtualNetwork(userVm.getForVirtualNetwork());

        userVmResponse.setPublicIpId(userVm.getPublicIpUuid());
        userVmResponse.setPublicIp(userVm.getPublicIpAddress());
        userVmResponse.setKeyPairNames(userVm.getKeypairNames());
        userVmResponse.setOsTypeId(userVm.getGuestOsUuid());
        GuestOS guestOS = ApiDBUtils.findGuestOSById(userVm.getGuestOsId());
        if (guestOS != null) {
            userVmResponse.setOsDisplayName(guestOS.getDisplayName());
        }

        if (details.contains(VMDetails.all) || details.contains(VMDetails.stats)) {
            // stats calculation
            VmStats vmStats = ApiDBUtils.getVmStatistics(userVm.getId(), accumulateStats);
            if (vmStats != null) {
                userVmResponse.setCpuUsed(new DecimalFormat("#.##").format(vmStats.getCPUUtilization()) + "%");
                userVmResponse.setNetworkKbsRead((long)vmStats.getNetworkReadKBs());
                userVmResponse.setNetworkKbsWrite((long)vmStats.getNetworkWriteKBs());
                userVmResponse.setDiskKbsRead((long)vmStats.getDiskReadKBs());
                userVmResponse.setDiskKbsWrite((long)vmStats.getDiskWriteKBs());
                userVmResponse.setDiskIORead((long)vmStats.getDiskReadIOs());
                userVmResponse.setDiskIOWrite((long)vmStats.getDiskWriteIOs());
                long totalMemory = (long)vmStats.getMemoryKBs();
                long freeMemory = (long)vmStats.getIntFreeMemoryKBs();
                long correctedFreeMemory = freeMemory >= totalMemory ? 0 : freeMemory;
                userVmResponse.setMemoryKBs(totalMemory);
                userVmResponse.setMemoryIntFreeKBs(correctedFreeMemory);
                userVmResponse.setMemoryTargetKBs((long)vmStats.getTargetMemoryKBs());

            }
        }

        if (details.contains(VMDetails.all) || details.contains(VMDetails.secgrp)) {
            Long securityGroupId = userVm.getSecurityGroupId();
            if (securityGroupId != null && securityGroupId.longValue() != 0) {
                SecurityGroupResponse resp = new SecurityGroupResponse();
                resp.setId(userVm.getSecurityGroupUuid());
                resp.setName(userVm.getSecurityGroupName());
                resp.setDescription(userVm.getSecurityGroupDescription());
                resp.setObjectName("securitygroup");
                if (userVm.getAccountType() == Account.Type.PROJECT) {
                    resp.setProjectId(userVm.getProjectUuid());
                    resp.setProjectName(userVm.getProjectName());
                } else {
                    resp.setAccountName(userVm.getAccountName());
                }
                userVmResponse.addSecurityGroup(resp);
            }
        }

        if (details.contains(VMDetails.all) || details.contains(VMDetails.nics)) {
            long nic_id = userVm.getNicId();
            if (nic_id > 0) {
                NicResponse nicResponse = new NicResponse();
                nicResponse.setId(userVm.getNicUuid());
                nicResponse.setIpaddress(userVm.getIpAddress());
                nicResponse.setGateway(userVm.getGateway());
                nicResponse.setNetmask(userVm.getNetmask());
                nicResponse.setNetworkid(userVm.getNetworkUuid());
                nicResponse.setNetworkName(userVm.getNetworkName());
                nicResponse.setMacAddress(userVm.getMacAddress());
                nicResponse.setIp6Address(userVm.getIp6Address());
                nicResponse.setIp6Gateway(userVm.getIp6Gateway());
                nicResponse.setIp6Cidr(userVm.getIp6Cidr());
                if (userVm.getBroadcastUri() != null) {
                    nicResponse.setBroadcastUri(userVm.getBroadcastUri().toString());
                }
                if (userVm.getIsolationUri() != null) {
                    nicResponse.setIsolationUri(userVm.getIsolationUri().toString());
                }
                if (userVm.getTrafficType() != null) {
                    nicResponse.setTrafficType(userVm.getTrafficType().toString());
                }
                if (userVm.getGuestType() != null) {
                    nicResponse.setType(userVm.getGuestType().toString());
                }

                if (userVm.getVpcUuid() != null) {
                    nicResponse.setVpcId(userVm.getVpcUuid());
                    VpcVO vpc = vpcDao.findByUuidIncludingRemoved(userVm.getVpcUuid());
                    nicResponse.setVpcName(vpc.getName());
                }
                nicResponse.setIsDefault(userVm.isDefaultNic());
                nicResponse.setDeviceId(String.valueOf(userVm.getNicDeviceId()));
                List<NicSecondaryIpVO> secondaryIps = ApiDBUtils.findNicSecondaryIps(userVm.getNicId());
                if (secondaryIps != null) {
                    List<NicSecondaryIpResponse> ipList = new ArrayList<NicSecondaryIpResponse>();
                    for (NicSecondaryIpVO ip : secondaryIps) {
                        NicSecondaryIpResponse ipRes = new NicSecondaryIpResponse();
                        ipRes.setId(ip.getUuid());
                        ApiResponseHelper.setResponseIpAddress(ip, ipRes);
                        ipList.add(ipRes);
                    }
                    nicResponse.setSecondaryIps(ipList);
                }
                IpAddress publicIp = ApiDBUtils.findIpByAssociatedVmIdAndNetworkId(userVm.getId(), userVm.getNetworkId());
                if (publicIp != null) {
                    nicResponse.setPublicIpId(publicIp.getUuid());
                    nicResponse.setPublicIp(publicIp.getAddress().toString());
                }

                nicResponse.setObjectName("nic");

                List<NicExtraDhcpOptionResponse> nicExtraDhcpOptionResponses = _nicExtraDhcpOptionDao.listByNicId(nic_id).stream()
                        .map(vo -> new NicExtraDhcpOptionResponse(Dhcp.DhcpOptionCode.valueOfInt(vo.getCode()).getName(), vo.getCode(), vo.getValue()))
                        .collect(Collectors.toList());
                nicResponse.setExtraDhcpOptions(nicExtraDhcpOptionResponses);

                userVmResponse.addNic(nicResponse);
            }
        }

        // update tag information
        long tag_id = userVm.getTagId();
        if (tag_id > 0 && !userVmResponse.containTag(tag_id)) {
            addTagInformation(userVm, userVmResponse);
        }

        userVmResponse.setHasAnnotation(annotationDao.hasAnnotations(userVm.getUuid(),
                AnnotationService.EntityType.VM.name(), _accountMgr.isRootAdmin(caller.getId())));

        if (details.contains(VMDetails.all) || details.contains(VMDetails.affgrp)) {
            Long affinityGroupId = userVm.getAffinityGroupId();
            if (affinityGroupId != null && affinityGroupId.longValue() != 0) {
                AffinityGroupResponse resp = new AffinityGroupResponse();
                resp.setId(userVm.getAffinityGroupUuid());
                resp.setName(userVm.getAffinityGroupName());
                resp.setDescription(userVm.getAffinityGroupDescription());
                resp.setObjectName("affinitygroup");
                resp.setAccountName(userVm.getAccountName());
                userVmResponse.addAffinityGroup(resp);
            }
        }

        if (BooleanUtils.isTrue(showUserData)) {
            userVmResponse.setUserData(userVm.getUserData());
        }

        // set resource details map
        // Allow passing details to end user
        // Honour the display field and only return if display is set to true
        List<UserVmDetailVO> vmDetails = _userVmDetailsDao.listDetails(userVm.getId(), true);
        if (vmDetails != null) {
            Map<String, String> resourceDetails = new HashMap<String, String>();
            for (UserVmDetailVO userVmDetailVO : vmDetails) {
                if (!userVmDetailVO.getName().startsWith(ApiConstants.PROPERTIES) ||
                        (UserVmManager.DisplayVMOVFProperties.value() && userVmDetailVO.getName().startsWith(ApiConstants.PROPERTIES))) {
                    resourceDetails.put(userVmDetailVO.getName(), userVmDetailVO.getValue());
                }
                if ((ApiConstants.BootType.UEFI.toString()).equalsIgnoreCase(userVmDetailVO.getName())) {
                    userVmResponse.setBootType("Uefi");
                    userVmResponse.setBootMode(userVmDetailVO.getValue().toLowerCase());

                }
            }
            if (vmDetails.size() == 0) {
                userVmResponse.setBootType("Bios");
                userVmResponse.setBootMode("legacy");
            }

            if (userVm.getPoolType() != null) {
                userVmResponse.setPoolType(userVm.getPoolType().toString());
            }

            // Remove deny listed settings if user is not admin
            if (caller.getType() != Account.Type.ADMIN) {
                String[] userVmSettingsToHide = QueryService.UserVMDeniedDetails.value().split(",");
                for (String key : userVmSettingsToHide) {
                    resourceDetails.remove(key.trim());
                }
            }
            userVmResponse.setDetails(resourceDetails);
            if (caller.getType() != Account.Type.ADMIN) {
                userVmResponse.setReadOnlyDetails(QueryService.UserVMReadOnlyDetails.value());
            }
        }

        userVmResponse.setObjectName(objectName);
        if (userVm.isDynamicallyScalable() == null) {
            userVmResponse.setDynamicallyScalable(false);
        } else {
            userVmResponse.setDynamicallyScalable(userVm.isDynamicallyScalable());
        }

        if (userVm.getDeleteProtection() == null) {
            userVmResponse.setDeleteProtection(false);
        } else {
            userVmResponse.setDeleteProtection(userVm.getDeleteProtection());
        }

        if (userVm.getAutoScaleVmGroupName() != null) {
            userVmResponse.setAutoScaleVmGroupName(userVm.getAutoScaleVmGroupName());
        }
        if (userVm.getAutoScaleVmGroupUuid() != null) {
            userVmResponse.setAutoScaleVmGroupId(userVm.getAutoScaleVmGroupUuid());
        }

        if (userVm.getUserDataId() != null) {
            userVmResponse.setUserDataId(userVm.getUserDataUUid());
            userVmResponse.setUserDataName(userVm.getUserDataName());
            userVmResponse.setUserDataDetails(userVm.getUserDataDetails());
            userVmResponse.setUserDataPolicy(userVm.getUserDataPolicy());
        }

        addVmRxTxDataToResponse(userVm, userVmResponse);

        if (TemplateType.VNF.equals(userVm.getTemplateType()) && (details.contains(VMDetails.all) || details.contains(VMDetails.vnfnics))) {
            addVnfInfoToserVmResponse(userVm, userVmResponse);
        }

        return userVmResponse;
    }