package eu.choreos.vv.servicesimulator; import java.util.ArrayList; import java.util.List; import eu.choreos.vv.exceptions.ParserException; /** * This class builds the script which is used to apply the WSMock dynamic behavior * * @author Felipe Besson * */ class ScriptBuilder { private String script; private String defaultRequest; private String defaultResponse; private List<MockResponse> responses; public ScriptBuilder(String mockWsdl, boolean interceptor){ script = "def request = new XmlSlurper().parseText(mockRequest.requestContent)" + "\n"; if(interceptor) script += "eu.choreos.vv.interceptor.RequestDispatcher.addResponse('" + mockWsdl + "', mockRequest.requestContent)" + "\n"; responses = new ArrayList<MockResponse>(); } public String getScript() throws ParserException { return script + createConditionStatements(); } public void addConditionFor(MockResponse response) { MockResponse removed = null; for (MockResponse entry : responses) { if(entry.equals(response)){ removed = entry; break; } } responses.remove(removed); responses.add(response); } public void setDefaultRequest(String defaultRequest) { this.defaultRequest = defaultRequest; } public void setDefaultResponse(String defaultResponse) { this.defaultResponse = defaultResponse; } private String createConditionStatements() throws ParserException{ String conditions = ""; String wildCard = ""; for (MockResponse entry : responses) { if(entry.getRequestParam()!=null && entry.getRequestParam()[0].equals("*")) wildCard = "context.message = '''" + entry.buildResponseContent(defaultResponse) + "'''"; else conditions += "if ( request == new XmlSlurper().parseText('''" + entry.buildRequestContent(defaultRequest) +"'''))" + "\n"+ "context.message = '''" + entry.buildResponseContent(defaultResponse) + "'''" +"\n"; } if (!wildCard.isEmpty()){ if (responses.size() == 1) return wildCard; conditions += "else" + "\n" + wildCard; } return conditions; } }