package com.sequenceiq.cloudbreak.controller;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Component;
import com.google.common.collect.Lists;
import com.sequenceiq.cloudbreak.api.endpoint.SmartSenseSubscriptionEndpoint;
import com.sequenceiq.cloudbreak.api.model.SmartSenseSubscriptionJson;
import com.sequenceiq.cloudbreak.converter.JsonToSmartSenseSubscriptionConverter;
import com.sequenceiq.cloudbreak.converter.SmartSenseSubscriptionToJsonConverter;
import com.sequenceiq.cloudbreak.domain.CbUser;
import com.sequenceiq.cloudbreak.domain.SmartSenseSubscription;
import com.sequenceiq.cloudbreak.service.smartsense.SmartSenseSubscriptionService;
@Component
public class SmartSenseSubscriptionController implements SmartSenseSubscriptionEndpoint {
@Inject
private SmartSenseSubscriptionService smartSenseSubService;
@Inject
private AuthenticatedUserService authenticatedUserService;
@Inject
private SmartSenseSubscriptionToJsonConverter toJsonConverter;
@Inject
private JsonToSmartSenseSubscriptionConverter toSmartSenseSubscriptionConverter;
@Override
public SmartSenseSubscriptionJson get(Long id) {
SmartSenseSubscription subscription = smartSenseSubService.findOneById(id);
return toJsonConverter.convert(subscription);
}
@Override
public void delete(Long id) {
CbUser cbUser = authenticatedUserService.getCbUser();
smartSenseSubService.delete(id, cbUser);
}
@Override
public SmartSenseSubscriptionJson postPublic(SmartSenseSubscriptionJson smartSenseSubscriptionJson) {
return createSmartSenseSubscription(smartSenseSubscriptionJson, true);
}
@Override
public List<SmartSenseSubscriptionJson> getPublics() {
List<SmartSenseSubscription> result = Lists.newArrayList();
smartSenseSubService.getOne().ifPresent(result::add);
return toJsonConverter.convert(result);
}
@Override
public SmartSenseSubscriptionJson postPrivate(SmartSenseSubscriptionJson smartSenseSubscriptionJson) {
return createSmartSenseSubscription(smartSenseSubscriptionJson, false);
}
@Override
public List<SmartSenseSubscriptionJson> getPrivates() {
return getPublics();
}
private SmartSenseSubscriptionJson createSmartSenseSubscription(SmartSenseSubscriptionJson json, boolean publicInAccount) {
CbUser cbUser = authenticatedUserService.getCbUser();
SmartSenseSubscription subscription = toSmartSenseSubscriptionConverter.convert(json);
subscription.setAccount(cbUser.getAccount());
subscription.setOwner(cbUser.getUserId());
subscription.setPublicInAccount(publicInAccount);
subscription = smartSenseSubService.create(subscription);
return toJsonConverter.convert(subscription);
}
}