package com.sequenceiq.cloudbreak.converter; import javax.inject.Inject; import org.springframework.security.access.AccessDeniedException; import org.springframework.stereotype.Component; import com.fasterxml.jackson.core.JsonProcessingException; import com.sequenceiq.cloudbreak.api.model.InstanceGroupRequest; import com.sequenceiq.cloudbreak.controller.validation.template.TemplateValidator; import com.sequenceiq.cloudbreak.domain.InstanceGroup; import com.sequenceiq.cloudbreak.domain.SecurityGroup; import com.sequenceiq.cloudbreak.domain.Template; import com.sequenceiq.cloudbreak.domain.json.Json; import com.sequenceiq.cloudbreak.service.securitygroup.SecurityGroupService; import com.sequenceiq.cloudbreak.service.template.TemplateService; @Component public class JsonToInstanceGroupConverter extends AbstractConversionServiceAwareConverter<InstanceGroupRequest, InstanceGroup> { @Inject private TemplateService templateService; @Inject private SecurityGroupService securityGroupService; @Inject private TemplateValidator templateValidator; @Override public InstanceGroup convert(InstanceGroupRequest json) { InstanceGroup instanceGroup = new InstanceGroup(); instanceGroup.setGroupName(json.getGroup()); instanceGroup.setNodeCount(json.getNodeCount()); instanceGroup.setInstanceGroupType(json.getType()); try { if (json.getSecurityGroupId() != null) { instanceGroup.setSecurityGroup(securityGroupService.get(json.getSecurityGroupId())); } } catch (AccessDeniedException e) { throw new AccessDeniedException(String.format("Access to securitygroup '%s' is denied or securitygroup doesn't exist.", json.getSecurityGroupId()), e); } try { if (json.getTemplateId() != null) { instanceGroup.setTemplate(templateService.get(json.getTemplateId())); } } catch (AccessDeniedException e) { throw new AccessDeniedException(String.format("Access to template '%s' is denied or template doesn't exist.", json.getTemplateId()), e); } if (json.getTemplate() != null) { Template template = getConversionService().convert(json.getTemplate(), Template.class); templateValidator.validateTemplateRequest(template); instanceGroup.setTemplate(template); } if (json.getSecurityGroup() != null) { instanceGroup.setSecurityGroup(getConversionService().convert(json.getSecurityGroup(), SecurityGroup.class)); } try { Json jsonProperties = new Json(json.getParameters()); instanceGroup.setAttributes(jsonProperties); } catch (JsonProcessingException e) { instanceGroup.setAttributes(null); } return instanceGroup; } }