/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package util.api;
import java.util.Collections;
import java.util.List;
import play.data.validation.Validation;
import play.mvc.Router;
import util.CatalogCategoryUtils;
import util.CatalogServiceUtils;
import com.emc.storageos.model.DataObjectRestRep;
import com.emc.storageos.model.search.Tags;
import com.emc.vipr.model.catalog.ApprovalInfo;
import com.emc.vipr.model.catalog.ApprovalRestRep;
import com.emc.vipr.model.catalog.CatalogCategoryRestRep;
import com.emc.vipr.model.catalog.CatalogServiceRestRep;
import com.emc.vipr.model.catalog.CategoryInfo;
import com.emc.vipr.model.catalog.ExecutionInfo;
import com.emc.vipr.model.catalog.ExecutionLogInfo;
import com.emc.vipr.model.catalog.ExecutionLogRestRep;
import com.emc.vipr.model.catalog.ExecutionStateRestRep;
import com.emc.vipr.model.catalog.ExecutionTaskInfo;
import com.emc.vipr.model.catalog.Link;
import com.emc.vipr.model.catalog.NamedReference;
import com.emc.vipr.model.catalog.OrderInfo;
import com.emc.vipr.model.catalog.OrderLogRestRep;
import com.emc.vipr.model.catalog.OrderRestRep;
import com.emc.vipr.model.catalog.Parameter;
import com.emc.vipr.model.catalog.Reference;
import com.emc.vipr.model.catalog.ServiceInfo;
import com.emc.vipr.model.catalog.ValidationError;
import com.google.common.collect.Lists;
/**
* @author Chris Dail
*/
public class ApiMapperUtils {
public static CategoryInfo newCategoryInfo(CatalogCategoryRestRep category) {
CategoryInfo it = new CategoryInfo();
it.setId(category.getId().toString());
it.setLink(Link.newSelfLink(categoryUrl(category.getId().toString())));
it.setInactive(category.getInactive());
it.setName(category.getName());
it.setTitle(category.getTitle());
it.setDescription(category.getDescription());
it.setImage(category.getImage());
List<CatalogCategoryRestRep> subCatalogCategories = CatalogCategoryUtils.getCatalogCategories(category);
for (CatalogCategoryRestRep subCatalogCategory : subCatalogCategories) {
it.getSubCategories().add(newNamedReference(subCatalogCategory));
}
List<CatalogServiceRestRep> catalogServices = CatalogServiceUtils.getCatalogServices(category);
for (CatalogServiceRestRep catalogService : catalogServices) {
it.getServices().add(newServiceInfo(catalogService));
}
return it;
}
private static NamedReference newNamedReference(CatalogCategoryRestRep category) {
NamedReference it = new NamedReference();
it.setId(category.getId().toString());
it.setHref(categoryUrl(category.getId().toString()));
it.setName(category.getName());
return it;
}
public static ServiceInfo newServiceInfo(CatalogServiceRestRep service) {
ServiceInfo it = new ServiceInfo();
it.setId(service.getId().toString());
it.setLink(Link.newSelfLink(serviceUrl(service.getId().toString())));
it.setInactive(service.getInactive());
it.setName(service.getName());
it.setTitle(service.getTitle());
it.setImage(service.getImage());
it.setDescription(service.getDescription());
it.setApprovalRequired(service.isApprovalRequired());
it.setExecutionWindowRequired(service.isExecutionWindowRequired());
it.setDefaultExecutionWindowId(service.getDefaultExecutionWindow() == null ? null : service.getDefaultExecutionWindow().getId()
.toString());
it.setBaseService(service.getBaseService());
it.setMaxSize(service.getMaxSize());
return it;
}
public static OrderInfo newOrderInfo(OrderRestRep order) {
OrderInfo it = new OrderInfo();
it.setId(order.getId().toString());
it.setOrderNumber(order.getOrderNumber());
it.setLink(Link.newSelfLink(orderUrl(order.getId().toString())));
it.setInactive(order.getInactive());
it.setService(newServiceReference(order.getCatalogService().getId().toString()));
it.setSummary(order.getSummary());
it.setMessage(order.getMessage());
it.setCreatedDate(order.getCreationTime().getTime());
it.setDateCompleted(order.getDateCompleted());
it.setSubmittedBy(order.getSubmittedBy());
it.setStatus(order.getOrderStatus());
it.setExecutionWindow(order.getExecutionWindow() != null && order.getExecutionWindow().getId() != null ? order.getExecutionWindow()
.getId().toString() : null);
it.setExecution(newExecutionReference(order.getId().toString()));
it.setTags(getTags(order));
if (order.getParameters() != null) {
it.setParameters(newParameters(order.getParameters()));
}
return it;
}
public static Tags getTags(DataObjectRestRep object) {
Tags tags = new Tags();
if (object.getTags() != null) {
for (String tag : object.getTags()) {
tags.getTag().add(tag);
}
}
return tags;
}
public static ExecutionInfo
newExecutionInfo(ExecutionStateRestRep state, List<OrderLogRestRep> logs, List<ExecutionLogRestRep> taskLogs) {
ExecutionInfo it = new ExecutionInfo();
it.setStartDate(state.getStartDate());
it.setEndDate(state.getEndDate());
it.setExecutionStatus(state.getExecutionStatus());
it.setCurrentTask(state.getCurrentTask());
it.getAffectedResources().addAll(state.getAffectedResources());
for (OrderLogRestRep log : logs) {
ExecutionLogInfo info = new ExecutionLogInfo();
info.setDate(log.getDate());
info.setLevel(log.getLevel());
info.setMessage(log.getMessage());
info.setPhase(log.getPhase());
info.setStackTrace(log.getStackTrace());
it.getExecutionLogs().add(info);
}
for (ExecutionLogRestRep log : taskLogs) {
ExecutionTaskInfo info = new ExecutionTaskInfo();
info.setDate(log.getDate());
info.setLevel(log.getLevel());
info.setMessage(log.getMessage());
info.setPhase(log.getPhase());
info.setStackTrace(log.getStackTrace());
info.setDetail(log.getDetail());
info.setElapsed(log.getElapsed());
it.getExecutionTasks().add(info);
}
return it;
}
public static ApprovalInfo newApprovalInfo(ApprovalRestRep request) {
ApprovalInfo it = new ApprovalInfo();
it.setId(request.getId().toString());
it.setLink(Link.newSelfLink(approvalUrl(request.getId().toString())));
it.setInactive(request.getInactive());
it.setApprovedBy(request.getApprovedBy());
it.setDateActioned(request.getDateActioned());
it.setMessage(request.getMessage());
it.setStatus(request.getApprovalStatus());
it.setOrder(newOrderReference(request.getOrder().getId().toString()));
it.setTenant(request.getTenant().getId().toString());
return it;
}
public static List<Parameter> newParameters(List<Parameter> parameters) {
List<Parameter> options = Lists.newArrayList();
for (Parameter parameter : parameters) {
options.add(new Parameter(parameter.getFriendlyLabel(), parameter.getValue(), parameter.getFriendlyValue()));
}
return options;
}
private static Reference newServiceReference(String id) {
return new Reference(id, serviceUrl(id));
}
public static Reference newOrderReference(String id) {
return new Reference(id, orderUrl(id));
}
public static Reference newApprovalReference(String id) {
return new Reference(id, approvalUrl(id));
}
private static Reference newExecutionReference(String id) {
return new Reference(id, reverse("api.OrdersApi.orderExecution", "orderId", id));
}
public static Reference newAssetOptionsReference(String asset) {
return new Reference(asset, reverse("api.AssetOptionsApi.options", "asset", asset));
}
private static String orderUrl(String id) {
return reverse("api.OrdersApi.order", "orderId", id);
}
private static String categoryUrl(String id) {
return reverse("api.CatalogApi.category", "categoryId", id);
}
private static String serviceUrl(String id) {
return reverse("api.CatalogApi.service", "serviceId", id);
}
private static String approvalUrl(String id) {
return reverse("api.ApprovalsApi.approval", "approvalId", id);
}
static String reverse(String action, String key, Object value) {
return Router.reverse(action, Collections.singletonMap(key, value)).url;
}
public static List<ValidationError> getValidationErrors() {
List<ValidationError> errors = Lists.newArrayList();
for (play.data.validation.Error error : Validation.errors()) {
errors.add(new ValidationError(error.getKey(), error.message()));
}
return errors;
}
}