package org.ovirt.engine.core.dao;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.inject.Named;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.AdditionalFeature;
import org.ovirt.engine.core.common.businessentities.SupportedAdditionalClusterFeature;
import org.ovirt.engine.core.common.mode.ApplicationMode;
import org.ovirt.engine.core.compat.Guid;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class ClusterFeatureDaoImpl extends BaseDao implements ClusterFeatureDao {
private static final RowMapper<AdditionalFeature> clusterFeatureRowMapper = (rs, rowNum) -> {
AdditionalFeature feature = new AdditionalFeature();
feature.setId(getGuidDefaultEmpty(rs, "feature_id"));
feature.setName(rs.getString("feature_name"));
feature.setDescription(rs.getString("description"));
feature.setCategory(ApplicationMode.from(rs.getInt("category")));
feature.setVersion(new VersionRowMapper("version").mapRow(rs, rowNum));
return feature;
};
private static final RowMapper<SupportedAdditionalClusterFeature> supportedClusterFeatureRowMapper = (rs, rowNum) -> {
AdditionalFeature feature = clusterFeatureRowMapper.mapRow(rs, rowNum);
SupportedAdditionalClusterFeature supportedClusterFeature = new SupportedAdditionalClusterFeature();
supportedClusterFeature.setFeature(feature);
supportedClusterFeature.setClusterId(getGuidDefaultEmpty(rs, "cluster_id"));
supportedClusterFeature.setEnabled(rs.getBoolean("is_enabled"));
return supportedClusterFeature;
};
@Override
public void addSupportedClusterFeature(SupportedAdditionalClusterFeature feature) {
getCallsHandler().executeModification("InsertSupportedClusterFeature",
createSupportedClusterFeatureParameterMapper(feature));
}
@Override
public void updateSupportedClusterFeature(SupportedAdditionalClusterFeature feature) {
getCallsHandler().executeModification("UpdateSupportedClusterFeature",
createSupportedClusterFeatureParameterMapper(feature));
}
private MapSqlParameterSource createSupportedClusterFeatureParameterMapper(SupportedAdditionalClusterFeature clusterFeature) {
return getCustomMapSqlParameterSource()
.addValue("cluster_id", clusterFeature.getClusterId())
.addValue("feature_id", clusterFeature.getFeature().getId())
.addValue("is_enabled", clusterFeature.isEnabled());
}
@Override
public void addAllSupportedClusterFeature(Collection<SupportedAdditionalClusterFeature> features) {
getCallsHandler().executeStoredProcAsBatch("InsertSupportedClusterFeature",
features,
this::createSupportedClusterFeatureParameterMapper);
}
@Override
public Set<SupportedAdditionalClusterFeature> getSupportedFeaturesByClusterId(Guid clusterId) {
List<SupportedAdditionalClusterFeature> features =
getCallsHandler().executeReadList("GetSupportedClusterFeaturesByClusterId",
supportedClusterFeatureRowMapper,
getCustomMapSqlParameterSource().addValue("cluster_id", clusterId));
return new HashSet<>(features);
}
@Override
public Set<AdditionalFeature> getClusterFeaturesForVersionAndCategory(String version, ApplicationMode category) {
List<AdditionalFeature> features =
getCallsHandler().executeReadList("GetClusterFeaturesByVersionAndCategory",
clusterFeatureRowMapper,
getCustomMapSqlParameterSource().addValue("version", version)
.addValue("category", category));
return new HashSet<>(features);
}
}