LoadFromRedmine.java
- package org.jbehave.core.io.rest.redmine;
- import static java.text.MessageFormat.format;
- import com.google.gson.Gson;
- import com.google.gson.JsonParser;
- import com.thoughtworks.xstream.XStream;
- import com.thoughtworks.xstream.security.AnyTypePermission;
- import org.jbehave.core.io.rest.LoadFromREST;
- import org.jbehave.core.io.rest.RESTClient.Type;
- /**
- * Loads resource from Redmine wiki pages using the REST API
- */
- public class LoadFromRedmine extends LoadFromREST {
- private static final String REDMINE_URI = "{0}.{1}";
- public LoadFromRedmine(Type type) {
- this(type, null, null);
- }
- public LoadFromRedmine(Type type, String username, String password) {
- super(type, username, password);
- }
- @Override
- protected String uri(String resourcePath, Type type) {
- return format(REDMINE_URI, resourcePath, type.name().toLowerCase());
- }
- @Override
- protected String text(String entity, Type type) {
- switch (type) {
- case JSON:
- Gson gson = new Gson();
- return gson.fromJson(jsonMember(entity, "wiki_page"), WikiPage.class).text;
- case XML:
- XStream xstream = new XStream();
- XStream.setupDefaultSecurity(xstream);
- xstream.addPermission(AnyTypePermission.ANY);
- xstream.alias("wiki_page", WikiPage.class);
- xstream.ignoreUnknownElements();
- return ((WikiPage) xstream.fromXML(entity)).text;
- default:
- return entity;
- }
- }
- private String jsonMember(String entity, String memberName) {
- return new JsonParser().parse(entity).getAsJsonObject().get(memberName).toString();
- }
- private static class WikiPage {
- String text;
- }
- }