package com.ibm.test.wcm.app.atom.actions; import java.io.IOException; import java.io.PrintWriter; import org.apache.abdera.model.Feed; import org.apache.abdera.writer.Writer; import java.util.Date; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.abdera.Abdera; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ibm.test.wcm.app.atom.resolver.NewFeedWCMResolver; import com.ibm.workplace.wcm.api.Repository; import com.ibm.workplace.wcm.api.WCM_API; import com.ibm.workplace.wcm.api.Workspace; import com.ibm.test.wcm.app.atom.util.AtomURLBuilder; public class NewFeedAction extends Action { protected boolean m_isHead; public NewFeedAction() throws Exception { m_isHead = false; } public ActionForward execute(ActionMapping mapping, ActionForm aform, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward forward = null; response.setHeader("Server", "Teamspace Web Content 1.0"); String httpMethod = request.getMethod(); if(httpMethod.equalsIgnoreCase("GET")) { m_isHead = false; forward = get(mapping, aform, request, response); } else if(httpMethod.equalsIgnoreCase("HEAD")) { m_isHead = true; forward = get(mapping, aform, request, response); } else { response.setStatus(405); response.setHeader("Allow", "GET, HEAD"); return null; } return forward; } public ActionForward get(ActionMapping arg0, ActionForm arg1, HttpServletRequest request, HttpServletResponse response) throws Exception { AtomURLBuilder urlBuilder = null; String atName = null; String optionAttr = null; String optionVal = null; try { atName = request.getParameter("atname"); //template name checking for News Authoring Template optionAttr = request.getParameter("optionattr"); //option attribute checking for News Authoring Template optionVal = request.getParameter("optionval"); //option value checking for News Authoring Template Repository repository = WCM_API.getRepository(); Workspace workspace = repository.getWorkspace(request.getUserPrincipal()); urlBuilder = new AtomURLBuilder(request, response); long lastMod = request.getDateHeader("If-Modified-Since"); NewFeedWCMResolver aggregatorwcmAtomFeed = new NewFeedWCMResolver(); org.apache.abdera.model.Feed feed = aggregatorwcmAtomFeed.getFeed(workspace, urlBuilder, request.getLocale(), atName, optionAttr, optionVal, request); if(feed != null) { writeFeed(response, feed, new Date(lastMod)); } else { response.setStatus(500); } } catch(Exception e) { response.setStatus(500); throw new Exception("Unexpected exception while creating feed", e); } return null; } protected void writeFeed(HttpServletResponse p_response, Feed p_feed, Date p_lastMod) throws IOException { p_response.setContentType("application/xml;charset=UTF-8"); p_response.setCharacterEncoding("UTF-8"); if(!m_isHead) { PrintWriter reponseWriter = p_response.getWriter(); Abdera abdera = new Abdera(); Writer pw = abdera.getWriterFactory().getWriter("PrettyXML"); pw.writeTo(p_feed, reponseWriter); reponseWriter.close(); } } }