/**
* Copyright 2011 Intuit Inc. All Rights Reserved
*/
package com.intuit.tank.api.script.util;
/*
* #%L
* Script Rest API
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.intuit.tank.api.model.v1.script.ExternalScriptTO;
import com.intuit.tank.api.model.v1.script.ScriptDescription;
import com.intuit.tank.api.model.v1.script.ScriptStepTO;
import com.intuit.tank.api.model.v1.script.ScriptTO;
import com.intuit.tank.api.model.v1.script.StepDataTO;
import com.intuit.tank.project.ExternalScript;
import com.intuit.tank.project.RequestData;
import com.intuit.tank.project.Script;
import com.intuit.tank.project.ScriptStep;
import com.intuit.tank.script.RequestDataPhase;
/**
* ScriptServiceUtil
*
* @author dangleton
*
*/
public class ScriptServiceUtil {
private static final Logger LOG = LogManager.getLogger(ScriptServiceUtil.class);
private ScriptServiceUtil() {
}
/**
* create a descriptor from the script object
*
* @param script
*/
public static ScriptTO scriptToTransferObject(Script script) {
ScriptTO ret = new ScriptTO();
ret.setComments(script.getComments());
ret.setCreated(script.getCreated());
ret.setCreator(script.getCreator());
ret.setId(script.getId());
ret.setModified(script.getModified());
ret.setName(script.getName());
ret.setProductName(script.getProductName());
ret.setRuntime(script.getRuntime());
ret.setSteps(scriptStepsToTransferobjectList(script.getScriptSteps()));
return ret;
}
public static List<ScriptStepTO> scriptStepsToTransferobjectList(List<ScriptStep> steps) {
List<ScriptStepTO> result = new ArrayList<ScriptStepTO>();
for (ScriptStep step : steps) {
result.add(scriptStepToTransferObject(step));
}
return result;
}
/**
* create a Script Entity object form ret Descriptor
*
* @return the Script
*/
public static Script transferObjectToScript(ScriptTO to) {
Script s = new Script();
s.setComments(to.getComments());
s.setCreated(to.getCreated());
s.setCreator(to.getCreator());
s.setId(to.getId() != null ? to.getId() : 0);
s.setModified(to.getModified());
s.setName(to.getName());
s.setProductName(to.getProductName());
s.setRuntime(to.getRuntime());
for (ScriptStepTO stepTo : to.getSteps()) {
s.addStep(transferObjectToScriptStep(stepTo));
}
return s;
}
/**
* @param step
* the step
*/
public static ScriptStepTO scriptStepToTransferObject(ScriptStep step) {
ScriptStepTO ret = new ScriptStepTO();
ret.setUuid(step.getUuid());
ret.setScriptGroupName(step.getScriptGroupName());
ret.setMethod(step.getMethod());
ret.setType(step.getType());
ret.setLabel(step.getLabel());
ret.setUrl(step.getUrl());
ret.setResult(step.getResult());
ret.setMimetype(step.getMimetype());
ret.setLoggingKey(step.getLoggingKey());
ret.setName(step.getName());
ret.setOnFail(step.getOnFail());
ret.setStepIndex(step.getStepIndex());
ret.setPayload(step.getPayload());
if (step.getResponse() != null) {
try {
ret.setResponse(URLEncoder.encode(step.getResponse(), "utf-8"));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
ret.setSimplePath(step.getSimplePath());
ret.setHostname(step.getHostname());
ret.setProtocol(step.getProtocol());
ret.setComments(step.getComments());
ret.setRespFormat(step.getRespFormat());
ret.setReqFormat(step.getReqFormat());
ret.setData(convertData(step.getData()));
ret.setPostDatas(convertData(step.getPostDatas()));
ret.setQueryStrings(convertData(step.getQueryStrings()));
ret.setRequestCookies(convertData(step.getRequestCookies()));
ret.setRequestheaders(convertData(step.getRequestheaders()));
ret.setResponseCookies(convertData(step.getResponseCookies()));
ret.setResponseData(convertData(step.getResponseData()));
ret.setResponseheaders(convertData(step.getResponseheaders()));
return ret;
}
/**
* @param step
* the step
*/
public static ScriptStepTO copy(ScriptStepTO step) {
ScriptStepTO ret = new ScriptStepTO();
ret.setUuid(step.getUuid());
ret.setScriptGroupName(step.getScriptGroupName());
ret.setMethod(step.getMethod());
ret.setType(step.getType());
ret.setLabel(step.getLabel());
ret.setUrl(step.getUrl());
ret.setResult(step.getResult());
ret.setMimetype(step.getMimetype());
ret.setLoggingKey(step.getLoggingKey());
ret.setName(step.getName());
ret.setOnFail(step.getOnFail());
ret.setStepIndex(step.getStepIndex());
ret.setPayload(step.getPayload());
if (step.getResponse() != null) {
try {
ret.setResponse(URLEncoder.encode(step.getResponse(), "utf-8"));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
ret.setSimplePath(step.getSimplePath());
ret.setHostname(step.getHostname());
ret.setProtocol(step.getProtocol());
ret.setComments(step.getComments());
ret.setRespFormat(step.getRespFormat());
ret.setReqFormat(step.getReqFormat());
ret.setData(copyData(step.getData()));
ret.setPostDatas(copyData(step.getPostDatas()));
ret.setQueryStrings(copyData(step.getQueryStrings()));
ret.setRequestCookies(copyData(step.getRequestCookies()));
ret.setRequestheaders(copyData(step.getRequestheaders()));
ret.setResponseCookies(copyData(step.getResponseCookies()));
ret.setResponseData(copyData(step.getResponseData()));
ret.setResponseheaders(copyData(step.getResponseheaders()));
return ret;
}
public static ScriptStep transferObjectToScriptStep(ScriptStepTO to) {
ScriptStep ret = new ScriptStep();
ret.setComments(to.getComments());
ret.setHostname(to.getHostname());
ret.setUuid(to.getUuid());
ret.setLabel(to.getLabel());
ret.setMethod(to.getMethod());
ret.setMimetype(to.getMimetype());
ret.setLoggingKey(to.getLoggingKey());
ret.setPayload(to.getPayload());
if (to.getResponse() != null) {
try {
ret.setResponse(URLDecoder.decode(to.getResponse(), "utf-8"));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
ret.setName(to.getName());
ret.setOnFail(to.getOnFail());
ret.setProtocol(to.getProtocol());
ret.setReqFormat(to.getReqFormat());
ret.setRespFormat(to.getRespFormat());
ret.setResult(to.getResult());
ret.setScriptGroupName(to.getScriptGroupName());
ret.setSimplePath(to.getSimplePath());
ret.setStepIndex(to.getStepIndex());
ret.setType(to.getType());
ret.setUrl(to.getUrl());
ret.setData(convertDataTO(to.getData()));
ret.setPostDatas(convertDataTO(to.getPostDatas()));
ret.setQueryStrings(convertDataTO(to.getQueryStrings()));
ret.setRequestCookies(convertDataTO(to.getRequestCookies()));
ret.setRequestheaders(convertDataTO(to.getRequestheaders()));
ret.setResponseCookies(convertDataTO(to.getResponseCookies()));
ret.setResponseData(convertDataTO(to.getResponseData()));
ret.setResponseheaders(convertDataTO(to.getResponseheaders()));
return ret;
}
public static StepDataTO requestDataToTransferObject(RequestData data) {
StepDataTO ret = new StepDataTO();
ret.setKey(data.getKey());
ret.setValue(data.getValue());
ret.setType(data.getType());
ret.setPhase(data.getPhase().name());
return ret;
}
public static StepDataTO copyStepDataTO(StepDataTO data) {
StepDataTO ret = new StepDataTO();
ret.setKey(data.getKey());
ret.setValue(data.getValue());
ret.setType(data.getType());
ret.setPhase(data.getPhase());
return ret;
}
/**
* @return
*/
public static RequestData transferObjectToRequestData(StepDataTO to) {
RequestData ret = new RequestData();
ret.setKey(to.getKey());
ret.setType(to.getType());
ret.setValue(to.getValue());
RequestDataPhase phase = null;
try {
phase = RequestDataPhase.valueOf(to.getPhase() != null ? to.getPhase() : RequestDataPhase.POST_REQUEST
.name());
} catch (Exception e) {
// if phase is set incorrectly or non existant.
LOG.warn("Error setting phase: " + e.toString());
}
ret.setPhase(phase != null ? phase : RequestDataPhase.POST_REQUEST);
return ret;
}
/**
* create a descriptor from the script object
*
* @param script
*/
public static ScriptDescription scriptToScriptDescription(Script script) {
ScriptDescription ret = new ScriptDescription();
ret.setComments(script.getComments());
ret.setCreated(script.getCreated());
ret.setCreator(script.getCreator());
ret.setId(script.getId());
ret.setModified(script.getModified());
ret.setName(script.getName());
ret.setProductName(script.getProductName());
ret.setRuntime(script.getRuntime());
return ret;
}
/**
* @param sd
* @return
*/
public static Script scriptDescriptionToScript(ScriptDescription sd) {
Script ret = new Script();
ret.setComments(sd.getComments());
ret.setCreated(sd.getCreated());
ret.setCreator(sd.getCreator());
ret.setId(sd.getId());
ret.setModified(sd.getModified());
ret.setName(sd.getName());
ret.setProductName(sd.getProductName());
ret.setRuntime(sd.getRuntime());
return ret;
}
/**
* @param data2
* @return
*/
private static Set<RequestData> convertDataTO(Set<StepDataTO> data) {
Set<RequestData> ret = new HashSet<RequestData>();
for (StepDataTO to : data) {
ret.add(transferObjectToRequestData(to));
}
return ret;
}
/**
* @param requestheaders2
* @return
*/
private static Set<StepDataTO> convertData(Set<RequestData> d) {
Set<StepDataTO> result = new HashSet<StepDataTO>();
if (d != null) {
for (RequestData rd : d) {
result.add(requestDataToTransferObject(rd));
}
}
return result;
}
/**
* @param requestheaders2
* @return
*/
private static Set<StepDataTO> copyData(Set<StepDataTO> d) {
Set<StepDataTO> result = new HashSet<StepDataTO>();
if (d != null) {
for (StepDataTO rd : d) {
result.add(copyStepDataTO(rd));
}
}
return result;
}
/**
* @param script
* @return
*/
public static ExternalScriptTO externalScriptToTO(ExternalScript script) {
ExternalScriptTO ret = new ExternalScriptTO();
ret.setId(script.getId());
ret.setCreated(script.getCreated());
ret.setCreator(script.getCreator());
ret.setModified(script.getModified());
ret.setName(script.getName());
ret.setProductName(script.getProductName());
ret.setScript(script.getScript());
return ret;
}
/**
* @param script
* @return
*/
public static ExternalScript TOToExternalScript(ExternalScriptTO script) {
ExternalScript ret = new ExternalScript();
ret.setId(script.getId());
if (script.getId() != 0) {
ret.setModified(script.getModified());
ret.setCreated(script.getCreated());
}
ret.setCreator(script.getCreator() != null ? script.getCreator() : "");
ret.setName(script.getName());
ret.setProductName(script.getProductName());
ret.setScript(script.getScript());
return ret;
}
}