Confluence.java
- package org.jbehave.core.io.rest.confluence;
- import static java.text.MessageFormat.format;
- import java.util.List;
- import com.thoughtworks.xstream.XStream;
- import com.thoughtworks.xstream.security.AnyTypePermission;
- import org.jbehave.core.io.rest.RESTClient;
- public class Confluence {
- private static final String SEARCH_PAGE = "{0}/rest/prototype/1/search/name?query={2}&type=page&spaceKey={1}";
- private static final String EXPAND_PAGE = "{0}?expand=children";
- private static final String REGULAR_PAGE = "{0}";
- private final RESTClient client;
- public Confluence(RESTClient client) {
- this.client = client;
- }
- public Page loadRootPage(String baseUrl, String spaceKey, String pageName) {
- String searchResult = client.get(format(SEARCH_PAGE, baseUrl, spaceKey, pageName));
- XStream parse = configureXStream();
- Results results = (Results) parse.fromXML(searchResult);
- return results.getGroup().getResult();
- }
- public Page loadPage(String pageUrl, boolean expanded) {
- String pattern = expanded ? EXPAND_PAGE : REGULAR_PAGE;
- String content = client.get(format(pattern, pageUrl));
- XStream parse = configureXStream();
- return (Page) parse.fromXML(content);
- }
- protected XStream configureXStream() {
- XStream xstream = new XStream();
- XStream.setupDefaultSecurity(xstream);
- xstream.addPermission(AnyTypePermission.ANY);
- xstream.addImplicitCollection(Page.class, "link");
- xstream.alias("results", Results.class);
- xstream.alias("result", Page.class);
- xstream.alias("content", Page.class);
- xstream.alias("link", Link.class);
- xstream.useAttributeFor(Link.class, "rel");
- xstream.useAttributeFor(Link.class, "href");
- xstream.ignoreUnknownElements();
- return xstream;
- }
- public static class Results {
- private Group group;
- public Group getGroup() {
- return group;
- }
- public void setGroup(Group group) {
- this.group = group;
- }
- }
- public static class Group {
- private Page result;
- public Page getResult() {
- return result;
- }
- public void setResult(Page result) {
- this.result = result;
- }
- }
- public static class Page {
- private List<Link> link;
- private String title;
- private String body;
- private List<Page> children;
- public String getSelfReference() {
- for (Link candidate : link) {
- if ("self".equals(candidate.getRel())) {
- return candidate.getHref();
- }
- }
- throw new RuntimeException("Page does not contain self-reference");
- }
- public boolean hasChildren() {
- return children != null;
- }
- public List<Link> getLink() {
- return link;
- }
- public void setLink(List<Link> link) {
- this.link = link;
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public List<Page> getChildren() {
- return children;
- }
- public void setChildren(List<Page> children) {
- this.children = children;
- }
- public String getBody() {
- return body;
- }
- public void setBody(String body) {
- this.body = body;
- }
- }
- public static class Link {
- private String rel;
- private String href;
- public String getRel() {
- return rel;
- }
- public void setRel(String rel) {
- this.rel = rel;
- }
- public String getHref() {
- return href;
- }
- public void setHref(String href) {
- this.href = href;
- }
- }
- }