package com.sequenceiq.cloudbreak.service.cluster.flow; import static com.sequenceiq.cloudbreak.domain.ClusterAttributes.VIEW_DEFINITIONS; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.sequenceiq.ambari.client.AmbariClient; import com.sequenceiq.cloudbreak.domain.Cluster; import com.sequenceiq.cloudbreak.domain.json.Json; import com.sequenceiq.cloudbreak.repository.ClusterRepository; @Service public class AmbariViewProvider { private static final Logger LOGGER = LoggerFactory.getLogger(AmbariViewProvider.class); @Inject private ClusterRepository clusterRepository; public Cluster provideViewInformation(AmbariClient ambariClient, Cluster cluster) { try { LOGGER.info("Provide view definitions."); List<String> viewDefinitions = (List<String>) ambariClient.getViewDefinitions(); Map<String, Object> obj = cluster.getAttributes().getMap(); if (obj == null) { obj = new HashMap<>(); } obj.put(VIEW_DEFINITIONS.name(), viewDefinitions); cluster.setAttributes(new Json(obj)); return clusterRepository.save(cluster); } catch (Exception e) { LOGGER.warn("Failed to provide view definitions.", e); } return cluster; } public boolean isViewDefinitionNotProvided(Cluster cluster) { Object viewDefinitions = cluster.getAttributes().getMap().get(VIEW_DEFINITIONS.name()); if (viewDefinitions != null) { return ((List<String>) viewDefinitions).isEmpty(); } return true; } }