package com.sequenceiq.cloudbreak.service.hostgroup;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.sequenceiq.cloudbreak.common.type.HostMetadataState;
import com.sequenceiq.cloudbreak.domain.Cluster;
import com.sequenceiq.cloudbreak.domain.HostGroup;
import com.sequenceiq.cloudbreak.domain.HostMetadata;
import com.sequenceiq.cloudbreak.repository.ConstraintRepository;
import com.sequenceiq.cloudbreak.repository.HostGroupRepository;
import com.sequenceiq.cloudbreak.repository.HostMetadataRepository;
@Service
@Transactional
public class HostGroupService {
@Inject
private HostGroupRepository hostGroupRepository;
@Inject
private HostMetadataRepository hostMetadataRepository;
@Inject
private ConstraintRepository constraintRepository;
public Set<HostGroup> getByCluster(Long clusterId) {
return hostGroupRepository.findHostGroupsInCluster(clusterId);
}
public HostGroup getByClusterIdAndName(Long clusterId, String hostGroupName) {
return hostGroupRepository.findHostGroupInClusterByName(clusterId, hostGroupName);
}
public HostGroup save(HostGroup hostGroup) {
return hostGroupRepository.save(hostGroup);
}
public Set<HostMetadata> findEmptyHostMetadataInHostGroup(Long hostGroupId) {
return hostMetadataRepository.findEmptyHostsInHostGroup(hostGroupId);
}
public HostGroup getByClusterIdAndInstanceGroupName(Long clusterId, String instanceGroupName) {
return hostGroupRepository.findHostGroupsByInstanceGroupName(clusterId, instanceGroupName);
}
public HostMetadata updateHostMetaDataStatus(Long id, HostMetadataState status) {
HostMetadata metaData = hostMetadataRepository.findOne(id);
metaData.setHostMetadataState(status);
return hostMetadataRepository.save(metaData);
}
public Set<HostGroup> saveOrUpdateWithMetadata(Collection<HostGroup> hostGroups, Cluster cluster) {
Set<HostGroup> result = new HashSet<>(hostGroups.size());
for (HostGroup hg : hostGroups) {
hg.setCluster(cluster);
hg.setConstraint(constraintRepository.save(hg.getConstraint()));
result.add(hostGroupRepository.save(hg));
}
return result;
}
}