All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fitnesse.responders.SerializedPageResponder Maven / Gradle / Ivy

There is a newer version: 20250223
Show newest version
// 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