
fitnesse.responders.SerializedPageResponder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fitnesse Show documentation
Show all versions of fitnesse Show documentation
The fully integrated standalone wiki, and acceptance testing framework.
// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.responders;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import fitnesse.util.XmlUtil;
import org.w3c.dom.Document;
import fitnesse.FitNesseContext;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureReadOperation;
import fitnesse.authentication.SecureResponder;
import fitnesse.http.Request;
import fitnesse.http.Response;
import fitnesse.http.SimpleResponse;
import fitnesse.wiki.PageXmlizer;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.SymbolicPage;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPagePath;
import fitnesse.wiki.XmlizePageCondition;
public class SerializedPageResponder implements SecureResponder {
private XmlizePageCondition xmlizePageCondition = new XmlizePageCondition() {
@Override
public boolean canBeXmlized(WikiPage page) {
return !(page instanceof SymbolicPage);
}
};
@Override
public Response makeResponse(FitNesseContext context, Request request) throws IOException {
WikiPage page = getRequestedPage(request, context);
if (page == null)
return new NotFoundResponder().makeResponse(context, request);
if ("pages".equals(request.getInput("type"))) {
PageXmlizer pageXmlizer = new PageXmlizer();
pageXmlizer.addPageCondition(xmlizePageCondition);
Document doc = pageXmlizer.xmlize(page);
SimpleResponse response = makeResponseWithxml(doc);
return response;
} else if ("data".equals(request.getInput("type"))) {
Document doc = new PageXmlizer().xmlize(page.getData());
SimpleResponse response = makeResponseWithxml(doc);
return response;
} else {
Object object = getObjectToSerialize(request, page);
byte[] bytes = serializeToBytes(object);
return responseWith(bytes);
}
}
private SimpleResponse makeResponseWithxml(Document doc) throws IOException {
//TODO MdM Shoudl probably use a StreamedResponse
String output = XmlUtil.xmlAsString(doc);
SimpleResponse response = new SimpleResponse();
response.setContentType("text/xml");
response.setContent(output);
return response;
}
private Object getObjectToSerialize(Request request, WikiPage page) {
Object object;
if ("versions".equals(request.getInput("type"))) {
object = page.getVersions();
} else if ("meat".equals(request.getInput("type"))) {
WikiPage originalPage = page;
if (request.hasInput("version"))
originalPage = page.getVersion(request.getInput("version"));
object = originalPage.getData();
} else
throw new RuntimeException("Improper use of proxy retrieval");
return object;
}
private WikiPage getRequestedPage(Request request, FitNesseContext context) {
String resource = request.getResource();
WikiPagePath path = PathParser.parse(resource);
WikiPage page = context.getRootPage().getPageCrawler().getPage(path);
return page;
}
private SimpleResponse responseWith(byte[] bytes) {
SimpleResponse response = new SimpleResponse();
response.setContentType("application/octet-stream");
response.setContent(bytes);
return response;
}
private byte[] serializeToBytes(Object object) throws IOException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(byteStream);
os.writeObject(object);
os.close();
byte[] bytes = byteStream.toByteArray();
return bytes;
}
@Override
public SecureOperation getSecureOperation() {
return new SecureReadOperation();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy