package com.sequenceiq.cloudbreak.converter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.sequenceiq.cloudbreak.api.model.RDSConfigRequest;
import com.sequenceiq.cloudbreak.api.model.RdsConfigPropertyJson;
import com.sequenceiq.cloudbreak.common.type.RdsType;
import com.sequenceiq.cloudbreak.common.type.ResourceStatus;
import com.sequenceiq.cloudbreak.domain.RDSConfig;
import com.sequenceiq.cloudbreak.domain.json.Json;
@Component
public class JsonToRDSConfigConverter extends AbstractConversionServiceAwareConverter<RDSConfigRequest, RDSConfig> {
@Override
public RDSConfig convert(RDSConfigRequest source) {
RDSConfig rdsConfig = new RDSConfig();
rdsConfig.setName(source.getName());
rdsConfig.setConnectionURL(source.getConnectionURL());
rdsConfig.setConnectionUserName(source.getConnectionUserName());
rdsConfig.setConnectionPassword(source.getConnectionPassword());
rdsConfig.setCreationDate(new Date().getTime());
rdsConfig.setDatabaseType(source.getDatabaseType());
rdsConfig.setStatus(ResourceStatus.USER_MANAGED);
rdsConfig.setHdpVersion(source.getHdpVersion());
rdsConfig.setType(source.getType() == null ? RdsType.HIVE : source.getType());
try {
Json json = new Json(convertPropertiesToJson(source.getProperties()));
rdsConfig.setAttributes(source.getProperties() == null ? new Json(new HashMap<>()) : json);
} catch (JsonProcessingException e) {
rdsConfig.setAttributes(null);
}
return rdsConfig;
}
private Map<String, String> convertPropertiesToJson(Set<RdsConfigPropertyJson> inputs) {
Map<String, String> attributes = new HashMap<>();
for (RdsConfigPropertyJson input : inputs) {
attributes.put(input.getName(), input.getValue());
}
return attributes;
}
}