package ftp.broker;
import ftp.provisioner.FtpServerProvisionerClient;
import ftp.provisioner.FtpServerProvisionerRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.cloudfoundry.community.servicebroker.exception.ServiceBrokerException;
import org.cloudfoundry.community.servicebroker.exception.ServiceInstanceBindingExistsException;
import org.cloudfoundry.community.servicebroker.model.CreateServiceInstanceBindingRequest;
import org.cloudfoundry.community.servicebroker.model.DeleteServiceInstanceBindingRequest;
import org.cloudfoundry.community.servicebroker.model.ServiceInstanceBinding;
import org.cloudfoundry.community.servicebroker.service.ServiceInstanceBindingService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
@Service
@Transactional
class FtpServiceInstanceBindingService implements ServiceInstanceBindingService {
private final PersistableServiceInstanceBindingRepository bindingRepository;
private Log log = LogFactory.getLog(getClass());
private FtpServerProvisionerClient client;
@Autowired
public FtpServiceInstanceBindingService(
FtpServerProvisionerClient client,
PersistableServiceInstanceBindingRepository repository) {
this.bindingRepository = repository;
this.client = client;
}
@Override
public ServiceInstanceBinding createServiceInstanceBinding(
CreateServiceInstanceBindingRequest request)
throws ServiceInstanceBindingExistsException,
ServiceBrokerException {
String bindingId = request.getBindingId(); // user
String instanceId = request.getServiceInstanceId(); // workspace
log.info(String.format("attempting to provision an FTP for workspace " +
"(serviceInstanceId) %s and user (bindingId) %s", instanceId, bindingId));
FtpServerProvisionerRequest r = new FtpServerProvisionerRequest(bindingId, instanceId);
String response = this.client.provisionFtpServer(r);
log.info(String.format("received FTP service provision response %s", response));
PersistableServiceInstanceBinding psb = new PersistableServiceInstanceBinding(
request.getBindingId(),
request.getServiceInstanceId(),
response,
null, request.getAppGuid());
return this.bindingRepository.save(psb);
}
@Override
public ServiceInstanceBinding deleteServiceInstanceBinding(DeleteServiceInstanceBindingRequest request)
throws ServiceBrokerException {
return Optional.ofNullable(this.bindingRepository.findOne(request.getBindingId()))
.map(psbi -> {
this.bindingRepository.delete(psbi);
return psbi;
})
.orElse(null);
}
}