001    package com.khubla.pragmatach.plugin.xstream;
002    
003    import java.io.ByteArrayInputStream;
004    import java.util.Map;
005    
006    import javax.servlet.http.HttpServletResponse;
007    
008    import org.apache.commons.io.IOUtils;
009    
010    import com.khubla.pragmatach.framework.api.PragmatachException;
011    import com.khubla.pragmatach.framework.controller.PragmatachController;
012    import com.khubla.pragmatach.framework.controller.impl.AbstractController;
013    import com.khubla.pragmatach.framework.controller.impl.AbstractResponse;
014    import com.thoughtworks.xstream.XStream;
015    
016    /**
017     * @author tome
018     */
019    public class XStreamResponse extends AbstractResponse {
020       /**
021        * the controller
022        */
023       private final PragmatachController pragmatachController;
024    
025       /**
026        * ctor
027        */
028       public XStreamResponse(Map<String, String> cacheHeaders, PragmatachController pragmatachController) {
029          super(cacheHeaders);
030          this.pragmatachController = pragmatachController;
031       }
032    
033       @Override
034       public String getContentType() throws PragmatachException {
035          return "text/xml";
036       }
037    
038       @Override
039       public Map<String, String> getHeaders() throws PragmatachException {
040          return super.getCacheHeaders();
041       }
042    
043       @Override
044       public void render(HttpServletResponse httpServletResponse) throws PragmatachException {
045          try {
046             final XStream xstream = new XStream();
047             xstream.omitField(AbstractController.class, "request");
048             final String XML = xstream.toXML(pragmatachController);
049             final ByteArrayInputStream bais = new ByteArrayInputStream(XML.getBytes());
050             IOUtils.copy(bais, httpServletResponse.getOutputStream());
051          } catch (final Exception e) {
052             throw new PragmatachException("Exception in render", e);
053          }
054       }
055    }