package com.sequenceiq.cloudbreak.converter;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.api.model.ConstraintJson;
import com.sequenceiq.cloudbreak.api.model.HostGroupResponse;
import com.sequenceiq.cloudbreak.api.model.HostMetadataResponse;
import com.sequenceiq.cloudbreak.api.model.RecipeResponse;
import com.sequenceiq.cloudbreak.domain.HostGroup;
import com.sequenceiq.cloudbreak.domain.HostMetadata;
import com.sequenceiq.cloudbreak.domain.Recipe;
@Component
public class HostGroupToJsonConverter extends AbstractConversionServiceAwareConverter<HostGroup, HostGroupResponse> {
@Override
public HostGroupResponse convert(HostGroup source) {
HostGroupResponse hostGroupBase = new HostGroupResponse();
hostGroupBase.setId(source.getId());
hostGroupBase.setName(source.getName());
hostGroupBase.setConstraint(getConversionService().convert(source.getConstraint(), ConstraintJson.class));
hostGroupBase.setRecipeIds(getRecipeIds(source.getRecipes()));
hostGroupBase.setMetadata(getHostMetadata(source.getHostMetadata()));
hostGroupBase.setRecoveryMode(source.getRecoveryMode());
hostGroupBase.setRecipes(getRecipes(source.getRecipes()));
return hostGroupBase;
}
private Set<HostMetadataResponse> getHostMetadata(final Set<HostMetadata> hostMetadata) {
return hostMetadata.stream().map(metadata -> {
HostMetadataResponse hostMetadataBase = new HostMetadataResponse();
hostMetadataBase.setId(metadata.getId());
hostMetadataBase.setGroupName(metadata.getHostGroup().getName());
hostMetadataBase.setName(metadata.getHostName());
hostMetadataBase.setState(metadata.getHostMetadataState().name());
return hostMetadataBase;
}).collect(Collectors.toSet());
}
private Set<Long> getRecipeIds(Set<Recipe> recipes) {
return recipes.stream().map(Recipe::getId).collect(Collectors.toSet());
}
private Set<RecipeResponse> getRecipes(Set<Recipe> recipes) {
Set<RecipeResponse> recipeResponseSet = new HashSet<>();
for (Recipe recipe : recipes) {
recipeResponseSet.add(getConversionService().convert(recipe, RecipeResponse.class));
}
return recipeResponseSet;
}
}