LoadFromRedmine.java

  1. package org.jbehave.core.io.rest.redmine;

  2. import static java.text.MessageFormat.format;

  3. import com.google.gson.Gson;
  4. import com.google.gson.JsonParser;
  5. import com.thoughtworks.xstream.XStream;
  6. import com.thoughtworks.xstream.security.AnyTypePermission;

  7. import org.jbehave.core.io.rest.LoadFromREST;
  8. import org.jbehave.core.io.rest.RESTClient.Type;

  9. /**
  10.  * Loads resource from Redmine wiki pages using the REST API
  11.  */
  12. public class LoadFromRedmine extends LoadFromREST {

  13.     private static final String REDMINE_URI = "{0}.{1}";

  14.     public LoadFromRedmine(Type type) {
  15.         this(type, null, null);
  16.     }

  17.     public LoadFromRedmine(Type type, String username, String password) {
  18.         super(type, username, password);
  19.     }

  20.     @Override
  21.     protected String uri(String resourcePath, Type type) {
  22.         return format(REDMINE_URI, resourcePath, type.name().toLowerCase());
  23.     }

  24.     @Override
  25.     protected String text(String entity, Type type) {
  26.         switch (type) {
  27.             case JSON:
  28.                 Gson gson = new Gson();
  29.                 return gson.fromJson(jsonMember(entity, "wiki_page"), WikiPage.class).text;
  30.             case XML:
  31.                 XStream xstream = new XStream();
  32.                 XStream.setupDefaultSecurity(xstream);
  33.                 xstream.addPermission(AnyTypePermission.ANY);
  34.                 xstream.alias("wiki_page", WikiPage.class);
  35.                 xstream.ignoreUnknownElements();
  36.                 return ((WikiPage) xstream.fromXML(entity)).text;
  37.             default:
  38.                 return entity;
  39.         }
  40.     }

  41.     private String jsonMember(String entity, String memberName) {
  42.         return new JsonParser().parse(entity).getAsJsonObject().get(memberName).toString();
  43.     }

  44.     private static class WikiPage {
  45.         String text;
  46.     }
  47. }