/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.sa.api.mapper; import static com.emc.storageos.api.mapper.DbObjectMapper.mapDataObjectFields; import static com.emc.storageos.api.mapper.DbObjectMapper.toRelatedResource; import static com.emc.storageos.db.client.URIUtil.uri; import java.net.URI; import java.util.ArrayList; import java.util.List; import com.emc.sa.model.util.ScheduleTimeHelper; import com.emc.storageos.db.client.model.NamedURI; import com.emc.storageos.db.client.model.uimodels.*; import com.emc.storageos.db.client.util.OrderTextCreator; import com.emc.storageos.model.ResourceTypeEnum; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import com.emc.sa.util.TextUtils; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.model.EncryptionProvider; import com.emc.vipr.model.catalog.ExecutionLogList; import com.emc.vipr.model.catalog.ExecutionLogRestRep; import com.emc.vipr.model.catalog.ExecutionStateRestRep; import com.emc.vipr.model.catalog.OrderCommonParam; import com.emc.vipr.model.catalog.OrderCreateParam; import com.emc.vipr.model.catalog.OrderLogList; import com.emc.vipr.model.catalog.OrderLogRestRep; import com.emc.vipr.model.catalog.OrderRestRep; import com.emc.vipr.model.catalog.Parameter; import com.google.common.collect.Lists; public class OrderMapper { private static final String ENCRYPTED_FIELD_MASK = "**********"; public static OrderRestRep map(Order from, List<OrderParameter> orderParameters) { if (from == null) { return null; } OrderRestRep to = new OrderRestRep(); mapDataObjectFields(from, to); if (from.getCatalogServiceId() != null) { to.setCatalogService(toRelatedResource(ResourceTypeEnum.CATALOG_SERVICE, from.getCatalogServiceId())); } if (from.getExecutionWindowId() != null) { to.setExecutionWindow(toRelatedResource(ResourceTypeEnum.EXECUTION_WINDOW, from.getExecutionWindowId().getURI())); } to.setDateCompleted(from.getDateCompleted()); to.setMessage(from.getMessage()); to.setOrderNumber(from.getOrderNumber()); to.setSummary(from.getSummary()); to.setSubmittedBy(from.getSubmittedByUserId()); to.setOrderStatus(from.getOrderStatus()); if (StringUtils.isNotBlank(from.getTenant())) { to.setTenant(toRelatedResource(ResourceTypeEnum.TENANT, uri(from.getTenant()))); } to.setLastUpdated(from.getLastUpdated()); if (orderParameters != null) { for (OrderParameter orderParameter : orderParameters) { Parameter parameter = new Parameter(); parameter.setEncrypted(orderParameter.getEncrypted()); if (parameter.isEncrypted()) { parameter.setFriendlyValue(ENCRYPTED_FIELD_MASK); parameter.setValue(ENCRYPTED_FIELD_MASK); } else { parameter.setFriendlyValue(orderParameter.getFriendlyValue()); parameter.setValue(orderParameter.getValue()); } parameter.setFriendlyLabel(orderParameter.getFriendlyLabel()); parameter.setLabel(orderParameter.getLabel()); to.getParameters().add(parameter); } } if (from.getScheduledEventId() != null) { to.setScheduledEventId(from.getScheduledEventId()); } if (from.getScheduledTime() != null) { to.setScheduledTime(from.getScheduledTime()); } return to; } public static ExecutionStateRestRep map(ExecutionState from) { return OrderTextCreator.map(from); } public static OrderLogRestRep map(ExecutionLog from) { return OrderTextCreator.map(from); } public static ExecutionLogRestRep map(ExecutionTaskLog from) { return OrderTextCreator.map(from); } public static Order createNewObject(URI tenantId, OrderCreateParam param) { Order newObject = new Order(); newObject.setId(URIUtil.createId(Order.class)); newObject.setTenant(tenantId.toString()); newObject.setCatalogServiceId(param.getCatalogService()); if (param.getScheduledEventId() != null) { newObject.setScheduledEventId(param.getScheduledEventId()); if (param.getScheduledTime() != null) { newObject.setScheduledTime(ScheduleTimeHelper.convertStrToCalendar(param.getScheduledTime())); } if (param.getExecutionWindow() == null) { newObject.setExecutionWindowId(null); } else { newObject.setExecutionWindowId(new NamedURI(param.getExecutionWindow(), "ExecutionWindow")); } } updateObject(newObject, param); return newObject; } public static List<OrderParameter> createOrderParameters(Order order, OrderCreateParam param, EncryptionProvider encryption) { List<OrderParameter> orderParams = new ArrayList<OrderParameter>(); if (param.getParameters() != null) { int parameterIndex = 0; for (Parameter parameter : param.getParameters()) { OrderParameter orderParameter = new OrderParameter(); orderParameter.setSortedIndex(parameterIndex++); orderParameter.setFriendlyLabel(parameter.getFriendlyLabel()); orderParameter.setLabel(parameter.getLabel()); orderParameter.setUserInput(parameter.isUserInput()); orderParameter.setEncrypted(parameter.isEncrypted()); if (parameter.isEncrypted()) { // We have to treat this as a CSV value - pull the CSV // apart, encrypt the pieces, re-CSV encode List<String> values = Lists.newArrayList(); for (String value : TextUtils.parseCSV(parameter.getValue())) { values.add(Base64.encodeBase64String(encryption.encrypt(value))); } String encryptedValue = TextUtils.formatCSV(values); orderParameter.setFriendlyValue(ENCRYPTED_FIELD_MASK); orderParameter.setValue(encryptedValue); } else { orderParameter.setFriendlyValue(parameter.getFriendlyValue()); orderParameter.setValue(parameter.getValue()); } orderParameter.setOrderId(order.getId()); orderParams.add(orderParameter); } } return orderParams; } public static void updateObject(Order object, OrderCommonParam param) { } public static OrderLogList toOrderLogList(List<ExecutionLog> executionLogs) { OrderLogList list = new OrderLogList(); for (ExecutionLog executionLog : executionLogs) { OrderLogRestRep orderLogRestRep = map(executionLog); list.getOrderLogs().add(orderLogRestRep); } return list; } public static ExecutionLogList toExecutionLogList(List<ExecutionTaskLog> executionTaskLogs) { ExecutionLogList list = new ExecutionLogList(); for (ExecutionTaskLog executionTaskLog : executionTaskLogs) { ExecutionLogRestRep executionLogRestRep = map(executionTaskLog); list.getExecutionLogs().add(executionLogRestRep); } return list; } }