package com.sequenceiq.cloudbreak.converter.spi;
import javax.inject.Inject;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.cloud.model.CloudInstance;
import com.sequenceiq.cloudbreak.cloud.model.InstanceStatus;
import com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate;
import com.sequenceiq.cloudbreak.converter.AbstractConversionServiceAwareConverter;
import com.sequenceiq.cloudbreak.domain.InstanceGroup;
import com.sequenceiq.cloudbreak.domain.InstanceMetaData;
import com.sequenceiq.cloudbreak.domain.Template;
@Component
public class InstanceMetaDataToCloudInstanceConverter extends AbstractConversionServiceAwareConverter<InstanceMetaData, CloudInstance> {
@Inject
private StackToCloudStackConverter stackToCloudStackConverter;
@Override
public CloudInstance convert(InstanceMetaData metaDataEnity) {
InstanceGroup group = metaDataEnity.getInstanceGroup();
Template template = metaDataEnity.getInstanceGroup().getTemplate();
InstanceStatus status = getInstanceStatus(metaDataEnity);
InstanceTemplate instanceTemplate = stackToCloudStackConverter.buildInstanceTemplate(
template, group.getGroupName(), metaDataEnity.getPrivateId(), status);
return new CloudInstance(metaDataEnity.getInstanceId(), instanceTemplate);
}
private InstanceStatus getInstanceStatus(InstanceMetaData metaData) {
switch (metaData.getInstanceStatus()) {
case REQUESTED:
return InstanceStatus.CREATE_REQUESTED;
case CREATED:
return InstanceStatus.CREATED;
case UNREGISTERED:
case REGISTERED:
return InstanceStatus.STARTED;
case DECOMMISSIONED:
return InstanceStatus.DELETE_REQUESTED;
case TERMINATED:
return InstanceStatus.TERMINATED;
default:
return InstanceStatus.UNKNOWN;
}
}
}