package org.archive.accesscontrol.oracle; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.archive.accesscontrol.model.Rule; import org.archive.accesscontrol.model.RuleChange; import org.archive.accesscontrol.model.RuleSet; import org.springframework.web.servlet.View; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; /** * The XStreamView uses XStream to serialize a given object as XML or JSON. * */ public class XStreamView implements View { private XStream xstream; private String contentType = "application/xml"; public XStreamView(String format) { if (format.equals("json")) { contentType = "application/json"; xstream = new XStream(new JettisonMappedXmlDriver()); } else if (format.equals("xml")) { contentType = "application/xml"; xstream = new XStream(); } configureXStream(); } public XStreamView(XStream xstream, String contentType) { this.contentType = contentType; this.xstream = xstream; configureXStream(); } private void configureXStream() { xstream.alias("rule", Rule.class); xstream.alias("ruleSet", RuleSet.class); xstream.alias("error", SimpleError.class); xstream.alias("ruleChange", RuleChange.class); } public String getContentType() { return contentType; } public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { Object obj = model.get("object"); if (obj instanceof SimpleError) { response.setStatus(((SimpleError) obj).getStatus()); } if (model.containsKey("status")) { response.setStatus((Integer) model.get("status")); } response.setContentType(getContentType()); xstream.toXML(obj, response.getOutputStream()); } /** * @return the xstream */ public XStream getXstream() { return xstream; } }