package com.sequenceiq.cloudbreak.controller;
import javax.inject.Inject;
import javax.validation.Valid;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.api.endpoint.UtilEndpoint;
import com.sequenceiq.cloudbreak.api.model.AmbariDatabaseDetailsJson;
import com.sequenceiq.cloudbreak.api.model.AmbariDatabaseTestResult;
import com.sequenceiq.cloudbreak.api.model.LdapConfigRequest;
import com.sequenceiq.cloudbreak.api.model.LdapTestResult;
import com.sequenceiq.cloudbreak.api.model.RDSBuildRequest;
import com.sequenceiq.cloudbreak.api.model.RDSConfigRequest;
import com.sequenceiq.cloudbreak.api.model.RdsBuildResult;
import com.sequenceiq.cloudbreak.api.model.RdsTestResult;
import com.sequenceiq.cloudbreak.controller.validation.ldapconfig.LdapConfigValidator;
import com.sequenceiq.cloudbreak.controller.validation.rds.RdsConnectionBuilder;
import com.sequenceiq.cloudbreak.controller.validation.rds.RdsConnectionValidator;
import com.sequenceiq.cloudbreak.domain.LdapConfig;
import com.sequenceiq.cloudbreak.domain.RDSConfig;
import com.sequenceiq.cloudbreak.repository.LdapConfigRepository;
import com.sequenceiq.cloudbreak.repository.RdsConfigRepository;
@Component
public class UtilController implements UtilEndpoint {
private static final String CONNECTED = "connected";
@Inject
private RdsConnectionValidator rdsConnectionValidator;
@Inject
private RdsConnectionBuilder rdsConnectionBuilder;
@Inject
private LdapConfigValidator ldapConfigValidator;
@Inject
private RdsConfigRepository rdsConfigRepository;
@Inject
private LdapConfigRepository ldapConfigRepository;
@Override
public RdsTestResult testRdsConnection(@Valid RDSConfigRequest rdsConfigRequest) {
RdsTestResult rdsTestResult = new RdsTestResult();
try {
rdsConnectionValidator.validateRdsConnection(rdsConfigRequest.getConnectionURL(), rdsConfigRequest.getConnectionUserName(),
rdsConfigRequest.getConnectionPassword());
rdsTestResult.setConnectionResult(CONNECTED);
} catch (BadRequestException e) {
rdsTestResult.setConnectionResult(e.getMessage());
}
return rdsTestResult;
}
@Override
public RdsBuildResult buildRdsConnection(@Valid RDSBuildRequest rdsBuildRequest) {
RdsBuildResult rdsBuildResult = new RdsBuildResult();
try {
String clusterName = rdsBuildRequest.getClusterName().replaceAll("[^a-zA-Z0-9]", "");
rdsConnectionBuilder.buildRdsConnection(
rdsBuildRequest.getRdsConfigRequest().getConnectionURL(),
rdsBuildRequest.getRdsConfigRequest().getConnectionUserName(),
rdsBuildRequest.getRdsConfigRequest().getConnectionPassword(),
clusterName);
rdsBuildResult.setAmbariDbName(clusterName + "ambari");
rdsBuildResult.setHiveDbName(clusterName + "hive");
rdsBuildResult.setRangerDbName(clusterName + "ranger");
} catch (BadRequestException e) {
throw new BadRequestException("Could not create databases in metastore.");
}
return rdsBuildResult;
}
@Override
public RdsTestResult testRdsConnectionById(Long id) {
RdsTestResult rdsTestResult = new RdsTestResult();
try {
RDSConfig config = rdsConfigRepository.findById(id);
if (config != null) {
rdsConnectionValidator.validateRdsConnection(config.getConnectionURL(), config.getConnectionUserName(), config.getConnectionPassword());
rdsTestResult.setConnectionResult(CONNECTED);
} else {
rdsTestResult.setConnectionResult("not found");
}
} catch (Exception e) {
rdsTestResult.setConnectionResult(e.getMessage());
}
return rdsTestResult;
}
@Override
public LdapTestResult testLdapConnection(@Valid LdapConfigRequest ldapConfig) {
LdapTestResult ldapTestResult = new LdapTestResult();
try {
ldapConfigValidator.validateLdapConnection(ldapConfig);
ldapTestResult.setConnectionResult(CONNECTED);
} catch (BadRequestException e) {
ldapTestResult.setConnectionResult(e.getMessage());
}
return ldapTestResult;
}
@Override
public LdapTestResult testLdapConnectionById(Long id) {
LdapTestResult ldapTestResult = new LdapTestResult();
try {
LdapConfig config = ldapConfigRepository.findOne(id);
if (config != null) {
ldapConfigValidator.validateLdapConnection(config);
ldapTestResult.setConnectionResult(CONNECTED);
} else {
ldapTestResult.setConnectionResult("not found");
}
} catch (BadRequestException e) {
ldapTestResult.setConnectionResult(e.getMessage());
}
return ldapTestResult;
}
@Override
public AmbariDatabaseTestResult testAmbariDatabase(@Valid AmbariDatabaseDetailsJson ambariDatabaseDetailsJson) {
return new AmbariDatabaseTestResult();
}
}