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 org.springframework.web.bind.annotation.PathVariable; import com.sequenceiq.cloudbreak.api.endpoint.NetworkEndpoint; import com.sequenceiq.cloudbreak.api.model.NetworkRequest; import com.sequenceiq.cloudbreak.api.model.NetworkResponse; import com.sequenceiq.cloudbreak.domain.CbUser; import com.sequenceiq.cloudbreak.domain.Network; import com.sequenceiq.cloudbreak.service.network.DefaultNetworkCreator; import com.sequenceiq.cloudbreak.service.network.NetworkService; @Component public class NetworkController implements NetworkEndpoint { @Autowired @Qualifier("conversionService") private ConversionService conversionService; @Autowired private NetworkService networkService; @Autowired private DefaultNetworkCreator networkCreator; @Autowired private AuthenticatedUserService authenticatedUserService; @Override public NetworkResponse postPrivate(NetworkRequest networkRequest) { CbUser user = authenticatedUserService.getCbUser(); return createNetwork(user, networkRequest, false); } @Override public NetworkResponse postPublic(NetworkRequest networkRequest) { CbUser user = authenticatedUserService.getCbUser(); return createNetwork(user, networkRequest, true); } @Override public Set<NetworkResponse> getPrivates() { CbUser user = authenticatedUserService.getCbUser(); networkCreator.createDefaultNetworks(user); Set<Network> networks = networkService.retrievePrivateNetworks(user); return convert(networks); } @Override public Set<NetworkResponse> getPublics() { CbUser user = authenticatedUserService.getCbUser(); networkCreator.createDefaultNetworks(user); Set<Network> networks = networkService.retrieveAccountNetworks(user); return convert(networks); } @Override public NetworkResponse get(Long id) { Network network = networkService.getById(id); return convert(network); } @Override public NetworkResponse getPrivate(String name) { CbUser user = authenticatedUserService.getCbUser(); Network network = networkService.getPrivateNetwork(name, user); return convert(network); } @Override public NetworkResponse getPublic(String name) { CbUser user = authenticatedUserService.getCbUser(); Network network = networkService.getPublicNetwork(name, user); return convert(network); } @Override public void delete(Long id) { CbUser user = authenticatedUserService.getCbUser(); networkService.delete(id, user); } @Override public void deletePublic(String name) { CbUser user = authenticatedUserService.getCbUser(); networkService.delete(name, user); } @Override public void deletePrivate(@PathVariable String name) { CbUser user = authenticatedUserService.getCbUser(); networkService.delete(name, user); } private NetworkResponse createNetwork(CbUser user, NetworkRequest networkRequest, boolean publicInAccount) { Network network = convert(networkRequest, publicInAccount); network = networkService.create(user, network); return conversionService.convert(network, NetworkResponse.class); } private Network convert(NetworkRequest networkRequest, boolean publicInAccount) { Network network = conversionService.convert(networkRequest, Network.class); network.setPublicInAccount(publicInAccount); return network; } private NetworkResponse convert(Network network) { return conversionService.convert(network, NetworkResponse.class); } private Set<NetworkResponse> convert(Set<Network> networks) { Set<NetworkResponse> jsons = new HashSet<>(); for (Network network : networks) { jsons.add(convert(network)); } return jsons; } }