package com.sequenceiq.cloudbreak.converter; import java.util.Map; import javax.inject.Inject; import org.springframework.stereotype.Component; import com.fasterxml.jackson.core.JsonProcessingException; import com.sequenceiq.cloudbreak.api.model.TemplateRequest; import com.sequenceiq.cloudbreak.common.type.ResourceStatus; import com.sequenceiq.cloudbreak.controller.BadRequestException; import com.sequenceiq.cloudbreak.domain.Template; import com.sequenceiq.cloudbreak.domain.json.Json; import com.sequenceiq.cloudbreak.service.topology.TopologyService; @Component public class JsonToTemplateConverter extends AbstractConversionServiceAwareConverter<TemplateRequest, Template> { @Inject private TopologyService topologyService; @Override public Template convert(TemplateRequest source) { Template template = new Template(); template.setName(source.getName()); template.setDescription(source.getDescription()); template.setStatus(ResourceStatus.USER_MANAGED); template.setVolumeCount(source.getVolumeCount()); template.setVolumeSize(source.getVolumeSize()); template.setCloudPlatform(source.getCloudPlatform()); template.setInstanceType(source.getInstanceType()); String volumeType = source.getVolumeType(); template.setVolumeType(volumeType == null ? "HDD" : volumeType); Map<String, Object> parameters = source.getParameters(); if (parameters != null && !parameters.isEmpty()) { try { template.setAttributes(new Json(parameters)); } catch (JsonProcessingException e) { throw new BadRequestException("Invalid parameters"); } } if (source.getTopologyId() != null) { template.setTopology(topologyService.getById(source.getTopologyId())); } return template; } }