package com.sequenceiq.cloudbreak.controller; import java.util.HashSet; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.convert.ConversionService; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.api.endpoint.SecurityGroupEndpoint; import com.sequenceiq.cloudbreak.api.model.SecurityGroupRequest; import com.sequenceiq.cloudbreak.api.model.SecurityGroupResponse; import com.sequenceiq.cloudbreak.domain.CbUser; import com.sequenceiq.cloudbreak.domain.SecurityGroup; import com.sequenceiq.cloudbreak.service.securitygroup.DefaultSecurityGroupCreator; import com.sequenceiq.cloudbreak.service.securitygroup.SecurityGroupService; @Component public class SecurityGroupController implements SecurityGroupEndpoint { @Autowired @Qualifier("conversionService") private ConversionService conversionService; @Autowired private SecurityGroupService securityGroupService; @Autowired private DefaultSecurityGroupCreator defaultSecurityGroupCreator; @Autowired private AuthenticatedUserService authenticatedUserService; @Override public SecurityGroupResponse postPrivate(SecurityGroupRequest securityGroupRequest) { CbUser user = authenticatedUserService.getCbUser(); return createSecurityGroup(user, securityGroupRequest, false); } @Override public SecurityGroupResponse postPublic(SecurityGroupRequest securityGroupRequest) { CbUser user = authenticatedUserService.getCbUser(); return createSecurityGroup(user, securityGroupRequest, true); } @Override public Set<SecurityGroupResponse> getPrivates() { CbUser user = authenticatedUserService.getCbUser(); defaultSecurityGroupCreator.createDefaultSecurityGroups(user); Set<SecurityGroup> securityGroups = securityGroupService.retrievePrivateSecurityGroups(user); return convert(securityGroups); } @Override public Set<SecurityGroupResponse> getPublics() { CbUser user = authenticatedUserService.getCbUser(); defaultSecurityGroupCreator.createDefaultSecurityGroups(user); Set<SecurityGroup> securityGroups = securityGroupService.retrieveAccountSecurityGroups(user); return convert(securityGroups); } @Override public SecurityGroupResponse get(Long id) { SecurityGroup securityGroup = securityGroupService.get(id); return convert(securityGroup); } @Override public SecurityGroupResponse getPrivate(String name) { CbUser user = authenticatedUserService.getCbUser(); SecurityGroup securityGroup = securityGroupService.getPrivateSecurityGroup(name, user); return convert(securityGroup); } @Override public SecurityGroupResponse getPublic(String name) { CbUser user = authenticatedUserService.getCbUser(); SecurityGroup securityGroup = securityGroupService.getPublicSecurityGroup(name, user); return convert(securityGroup); } @Override public void delete(Long id) { CbUser user = authenticatedUserService.getCbUser(); securityGroupService.delete(id, user); } @Override public void deletePublic(String name) { CbUser user = authenticatedUserService.getCbUser(); securityGroupService.delete(name, user); } @Override public void deletePrivate(String name) { CbUser user = authenticatedUserService.getCbUser(); securityGroupService.delete(name, user); } private SecurityGroupResponse createSecurityGroup(CbUser user, SecurityGroupRequest securityGroupRequest, boolean publicInAccount) { SecurityGroup securityGroup = convert(securityGroupRequest, publicInAccount); securityGroup = securityGroupService.create(user, securityGroup); return conversionService.convert(securityGroup, SecurityGroupResponse.class); } private SecurityGroup convert(SecurityGroupRequest securityGroupRequest, boolean publicInAccount) { SecurityGroup securityGroup = conversionService.convert(securityGroupRequest, SecurityGroup.class); securityGroup.setPublicInAccount(publicInAccount); return securityGroup; } private SecurityGroupResponse convert(SecurityGroup securityGroup) { return conversionService.convert(securityGroup, SecurityGroupResponse.class); } private Set<SecurityGroupResponse> convert(Set<SecurityGroup> securityGroups) { Set<SecurityGroupResponse> jsons = new HashSet<>(); for (SecurityGroup securityGroup : securityGroups) { jsons.add(convert(securityGroup)); } return jsons; } }