package com.sequenceiq.cloudbreak.converter;
import java.util.Set;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.api.model.InstanceGroupResponse;
import com.sequenceiq.cloudbreak.api.model.InstanceMetaDataJson;
import com.sequenceiq.cloudbreak.api.model.SecurityGroupResponse;
import com.sequenceiq.cloudbreak.api.model.TemplateResponse;
import com.sequenceiq.cloudbreak.domain.InstanceGroup;
import com.sequenceiq.cloudbreak.domain.InstanceMetaData;
import com.sequenceiq.cloudbreak.domain.json.Json;
@Component
public class InstanceGroupToJsonConverter extends AbstractConversionServiceAwareConverter<InstanceGroup, InstanceGroupResponse> {
@Override
public InstanceGroupResponse convert(InstanceGroup entity) {
InstanceGroupResponse instanceGroupResponse = new InstanceGroupResponse();
instanceGroupResponse.setGroup(entity.getGroupName());
instanceGroupResponse.setId(entity.getId());
instanceGroupResponse.setNodeCount(entity.getNodeCount());
if (entity.getTemplate() != null) {
instanceGroupResponse.setTemplateId(entity.getTemplate().getId());
instanceGroupResponse.setTemplate(getConversionService().convert(entity.getTemplate(), TemplateResponse.class));
}
instanceGroupResponse.setType(entity.getInstanceGroupType());
instanceGroupResponse.setMetadata(convertEntitiesToJson(entity.getInstanceMetaData()));
if (entity.getSecurityGroup() != null) {
instanceGroupResponse.setSecurityGroup(getConversionService().convert(entity.getSecurityGroup(), SecurityGroupResponse.class));
instanceGroupResponse.setSecurityGroupId(entity.getSecurityGroup().getId());
}
Json attributes = entity.getAttributes();
if (attributes != null) {
instanceGroupResponse.setParameters(attributes.getMap());
}
return instanceGroupResponse;
}
private Set<InstanceMetaDataJson> convertEntitiesToJson(Set<InstanceMetaData> metadata) {
return (Set<InstanceMetaDataJson>) getConversionService().convert(metadata,
TypeDescriptor.forObject(metadata),
TypeDescriptor.collection(Set.class, TypeDescriptor.valueOf(InstanceMetaDataJson.class)));
}
}