Skip to content

Commit

Permalink
further #65 work, now close to get it integrated to the already avail…
Browse files Browse the repository at this point in the history
…able API functions - and an API bug identified around uploading stub config and template files was fixed.
  • Loading branch information
tkohegyi committed Feb 10, 2016
1 parent ecc41c8 commit 7f855f9
Show file tree
Hide file tree
Showing 18 changed files with 330 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,18 @@ public boolean uploadStubConfiguration(String fileName, File file) {
return fileUpload.uploadStubConfiguration(fileName, file);
}

/**
* Uploads stub configuration.
*
* @param resource the String resource itself that is considered as stub configuration
* @return <tt>true</tt> if the upload request is successful, otherwise return <tt>false</tt>
*/
public boolean uploadStubConfiguration(String resource) {
LOG.debug("Upload stub configuration.");

return fileUpload.uploadStubConfiguration(resource);
}

public void setWilmaApplication(WilmaApplication wilmaApplication) {
this.wilmaApplication = wilmaApplication;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
Expand Down Expand Up @@ -143,6 +144,37 @@ public boolean uploadFile(String url, File file) {
return requestSuccessful;
}

/**
* Posting the given stream to the given URL via HTTP POST method and returns
* {@code true} if the request was successful.
*
* @param url the given URL
* @param resource the given string that will be uploaded as resource
* @return {@code true} if the request is successful, otherwise return {@code false}
*/
public boolean uploadString(String url, String resource) {
boolean requestSuccessful = false;

PostMethod method = new PostMethod(url);

try {
method.setRequestEntity(new StringRequestEntity(resource, null, null));

int statusCode = httpclient.executeMethod(method);
if (HttpStatus.SC_OK == statusCode) {
requestSuccessful = true;
}
} catch (HttpException e) {
LOG.error("Protocol exception occurred when called: " + url, e);
} catch (IOException e) {
LOG.error("I/O (transport) error occurred when called: " + url, e);
} finally {
method.releaseConnection();
}

return requestSuccessful;
}

public void setHttpClient(HttpClient httpclient) {
this.httpclient = httpclient;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,11 @@ public class Upload {
private static final Logger LOG = LoggerFactory.getLogger(Upload.class);

private static final String CONDITION_CHECKER_UPLOAD_URL_POSTFIX = "config/admin/stub/conditionchecker";
private static final String STUB_CONFIGURATION_UPLOAD_URL_POSTFIX = "config/admin/stub/templates";
private static final String TEMPLATE_UPLOAD_URL_POSTFIX = "config/admin/stub/templateformatter";
private static final String TEMPLATE_FORMATTER_UPLOAD_URL_POSTFIX = "config/admin/stub/stubconfig";
private static final String STUB_CONFIGURATION_UPLOAD_URL_POSTFIX = "config/admin/stub/stubconfig";
private static final String TEMPLATE_UPLOAD_URL_POSTFIX = "config/admin/stub/templates";
private static final String TEMPLATE_FORMATTER_UPLOAD_URL_POSTFIX = "config/admin/stub/templateformatter";
private static final String FILE_NAME = "fileName";
private static final String FILE_FROM_STRING = "directUpload";

private WilmaHttpClient wilmaClient;
private WilmaServiceConfig config;
Expand Down Expand Up @@ -131,12 +132,32 @@ public boolean uploadStubConfiguration(String fileName, File file) {
return callFileUploadMethod(url, file);
}

/**
* Uploads the given stub configuration in a form of string.
*
* @param resource is the String that holds the stub configuration
* @return <tt>true</tt> if the request is successful, otherwise return <tt>false</tt>
*/
public boolean uploadStubConfiguration(String resource) {
LOG.debug("Call stub configuration upload API.");

String url = buildUrl(STUB_CONFIGURATION_UPLOAD_URL_POSTFIX, ImmutableMap.of(FILE_NAME, FILE_FROM_STRING));

return callStringUploadMethod(url, resource);
}

private boolean callFileUploadMethod(String url, File file) {
LOG.debug("Send file upload request to: " + url);

return wilmaClient.uploadFile(url, file);
}

private boolean callStringUploadMethod(String url, String resource) {
LOG.debug("Send resource upload request to: " + url);

return wilmaClient.uploadString(url, resource);
}

private String buildUrl(String postfix, Map<String, String> params) {
return UrlBuilderUtils.buildAbsoluteURL(false, config.getHost(), config.getPort().toString(), postfix, params);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
along with Wilma. If not, see <http://www.gnu.org/licenses/>.
===========================================================================*/

import com.epam.wilma.service.unit.helper.ConfigurationParameter;
import com.epam.wilma.service.unit.helper.common.ConfigurationParameter;
import com.epam.wilma.service.unit.request.RequestCondition;

/**
Expand All @@ -30,6 +30,11 @@
public class RequestConditionBuilder {

private String configurationString = "";
private String groupName;

public RequestConditionBuilder(String groupName) {
this.groupName = groupName;
}

public RequestConditionBuilder andStart() {
configurationString += "<and>\n";
Expand Down Expand Up @@ -71,7 +76,7 @@ public RequestConditionBuilder notEnd() {
private RequestConditionBuilder condition(String className, ConfigurationParameter[] configurationParameters, boolean negate) {
String conditionString = "<condition class=\"" + className + "\" ";
if (negate) {
conditionString += "negate=true ";
conditionString += "negate=\"true\" ";
}
conditionString += ">\n";
if (configurationParameters != null) {
Expand Down Expand Up @@ -124,18 +129,14 @@ public RequestConditionBuilder negatedCondition(String className) {
return condition(className, null, true);
}

public RequestConditionBuilder comingFrom(String localhost) {
public RequestConditionBuilder comingFrom(String hostName) {
String conditionString = "<condition class=\"AndUrlPatternChecker\">\n" +
" <param name=\"irrelevant\" value=\"//" + hostName + "\" />\n" +
"</condition>\n";
configurationString += conditionString;
return this;
}

public ResponseDescriptorBuilder willResponseWith() {
return new ResponseDescriptorBuilder(build());
}

public RequestCondition build() {
return new RequestCondition(configurationString);
}

public RequestConditionBuilder withHeader(String name, String value) {
String conditionString = "<condition class=\"HeaderParameterChecker\">\n" +
" <param name=\"" + name + "\" value=\"" + value + "\" />\n" +
Expand All @@ -146,14 +147,26 @@ public RequestConditionBuilder withHeader(String name, String value) {

public RequestConditionBuilder withHeader(String pattern) {
String conditionString = "<condition class=\"AndHeaderPatternChecker\">\n" +
" <param name=\"dummy\" value=\"" + pattern + "\" />\n" +
" <param name=\"irrelevant\" value=\"" + pattern + "\" />\n" +
"</condition>\n";
configurationString += conditionString;
return this;
}

public RequestConditionBuilder textInUrl(String textInUrl) {
String conditionString = "<condition class=\"AndUrlPatternChecker\">\n" +
" <param name=\"irrelevant\" value=\"" + textInUrl + "\" />\n" +
"</condition>\n";
configurationString += conditionString;
return this;
}

public ResponseDescriptorBuilder willResponseWith() {
return new ResponseDescriptorBuilder(groupName, build());
}

public RequestCondition build() {
return new RequestCondition(configurationString);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@
along with Wilma. If not, see <http://www.gnu.org/licenses/>.
===========================================================================*/

import com.epam.wilma.service.unit.helper.ConfigurationParameter;
import com.epam.wilma.service.unit.helper.StubConfigurationException;
import com.epam.wilma.service.unit.helper.Template;
import com.epam.wilma.service.unit.helper.TemplateFormatter;
import com.epam.wilma.service.unit.helper.response.TemplateType;
import com.epam.wilma.service.unit.helper.common.ConfigurationParameter;
import com.epam.wilma.service.unit.helper.common.StubConfigurationException;
import com.epam.wilma.service.unit.helper.response.Template;
import com.epam.wilma.service.unit.helper.response.TemplateFormatter;
import com.epam.wilma.service.unit.request.RequestCondition;
import com.epam.wilma.service.unit.response.ResponseDescriptor;
import org.slf4j.Logger;
Expand All @@ -37,20 +38,41 @@
*/
public class ResponseDescriptorBuilder {
private static final Logger LOG = LoggerFactory.getLogger(ResponseDescriptorBuilder.class);

private String groupName;
private RequestCondition requestCondition;
private String code = "200";
private String delay = "0";
private String mimeType = "text/plain";
private Template template = new Template("text", "Wilma default response");
private Template template = new Template(TemplateType.TEXT, "Wilma default response");
private LinkedList<TemplateFormatter> templateFormatters = new LinkedList<>();

public ResponseDescriptorBuilder(RequestCondition requestCondition) {
public ResponseDescriptorBuilder(String groupName, RequestCondition requestCondition) {
this.groupName = groupName;
this.requestCondition = requestCondition;
}

/**
*
* Warning! When you call it, the mime type will be set to text/plain
* @param plainTextResponse
* @return
*/
public ResponseDescriptorBuilder plainTextResponse(String plainTextResponse) {
mimeType = "text/plain";
template = new Template("text", plainTextResponse);
template = new Template(TemplateType.TEXT, plainTextResponse);
return this;
}

/**
*
* Warning! When you call it, the mime type will be set to text/html
* @param fileName
* @return
*/
public ResponseDescriptorBuilder htmlFileResponse(String fileName) {
mimeType = "text/html";
template = new Template(TemplateType.TEXTFILE, fileName);
return this;
}

Expand All @@ -60,7 +82,7 @@ public ResponseDescriptor buildResponseDescriptor() {

public Stub build() {
//need to validate both the request condition, and the response descriptor
Stub stub = new Stub(requestCondition, buildResponseDescriptor());
Stub stub = new Stub(groupName, requestCondition, buildResponseDescriptor());
LOG.debug("Stub created, XML is:\n" + stub.toString());
return stub;
}
Expand All @@ -83,7 +105,8 @@ public ResponseDescriptorBuilder applyFormatter(String formatterClass, Configura
return this;
}

public ResponseDescriptorBuilder generatedResponse() {
public ResponseDescriptorBuilder generatedResponse(String className) {
template = new Template(TemplateType.EXTERNAL, className);
return this;
}

Expand All @@ -94,4 +117,9 @@ public ResponseDescriptorBuilder withDelay(int i) {
delay = String.valueOf(i);
return this;
}

public ResponseDescriptorBuilder withMimeType(String mimeType) {
this.mimeType = mimeType;
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,21 +49,23 @@ public class Stub {
private static String STUB_CONFIGURATION_FORMATTER =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<wilma-stub xmlns=\"http://epam.github.io/Wilma/xsd/StubConfig\" "
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" groupname=\"%5$s\" "
+ "xsi:schemaLocation=\"http://epam.github.io/Wilma/xsd/StubConfig http://epam.github.io/Wilma/xsd/StubConfig.xsd\">\n"
+ "<dialog-descriptor name=\"%1$s\" usage=\"always\" comment=\"%1$s\">\n"
+ "<condition-descriptor>\n%2$s</condition-descriptor>\n"
+ "%3$s"
+ "</dialog-descriptor>\n"
+ "<template-descriptor name=\"%1$s\"\n>\n%4$s</template-descriptor>\n"
+ "<template-descriptor name=\"%1$s\">\n%4$s</template-descriptor>\n"
+ "</wilma-stub>";

private RequestCondition requestCondition;
private ResponseDescriptor responseDescriptor;
private String groupName;

public Stub(RequestCondition requestCondition, ResponseDescriptor responseDescriptor) {
public Stub(String groupName, RequestCondition requestCondition, ResponseDescriptor responseDescriptor) {
this.requestCondition = requestCondition;
this.responseDescriptor = responseDescriptor;
this.groupName = groupName;
}

/**
Expand All @@ -78,7 +80,7 @@ public String toString() {
String usedTemplateAndFormatter = responseDescriptor.templateToString();
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
formatter.format(STUB_CONFIGURATION_FORMATTER, generatedName, conditionContent, responseContent, usedTemplateAndFormatter);
formatter.format(STUB_CONFIGURATION_FORMATTER, generatedName, conditionContent, responseContent, usedTemplateAndFormatter, groupName);
return sb.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,26 @@
along with Wilma. If not, see <http://www.gnu.org/licenses/>.
===========================================================================*/

import com.epam.wilma.service.unit.helper.common.IdGenerator;

/**
* Builder class for building a complete Stub Configuration.
*
* @author Tamas_Kohegyi
*
*/
public class StubConfigurationBuilder {
private String groupName = "Default";

public StubConfigurationBuilder(String groupName) {
this.groupName = groupName;
}

public StubConfigurationBuilder() {
this.groupName = "service-api-" + IdGenerator.getNextGeneratedId();
}

public RequestConditionBuilder forRequestsLike() {
return new RequestConditionBuilder();
return new RequestConditionBuilder(groupName);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.epam.wilma.service.unit.helper;
package com.epam.wilma.service.unit.helper.common;
/*==========================================================================
Copyright 2013-2016 EPAM Systems
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.epam.wilma.service.unit.helper;
package com.epam.wilma.service.unit.helper.common;
/*==========================================================================
Copyright 2013-2016 EPAM Systems
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.epam.wilma.service.unit.helper;
package com.epam.wilma.service.unit.helper.common;
/*==========================================================================
Copyright 2013-2016 EPAM Systems
Expand Down
Loading

0 comments on commit 7f855f9

Please sign in to comment.