1 18 19 package org.apache.struts.webapp.tiles.rssChannel; 20 21 import java.util.ArrayList ; 22 import java.util.List ; 23 24 import javax.servlet.http.HttpServletRequest ; 25 import javax.servlet.http.HttpServletResponse ; 26 27 import org.apache.commons.digester.rss.Channel; 28 import org.apache.commons.digester.rss.RSSDigester; 29 import org.apache.commons.logging.Log; 30 import org.apache.commons.logging.LogFactory; 31 import org.apache.struts.action.ActionForm; 32 import org.apache.struts.action.ActionForward; 33 import org.apache.struts.action.ActionMapping; 34 import org.apache.struts.action.ActionMessage; 35 import org.apache.struts.action.ActionMessages; 36 import org.apache.struts.tiles.ComponentContext; 37 import org.apache.struts.tiles.actions.TilesAction; 38 39 55 public final class RssChannelsAction extends TilesAction { 56 57 60 private static Log log = LogFactory.getLog(RssChannelsAction.class); 61 62 65 public static final String CHANNELS_KEY = "CHANNELS"; 66 67 70 public static final String CHANNEL_URLS_KEY = "urls"; 71 72 75 public static final String CHANNEL_URL_KEY = "url"; 76 77 89 public ActionForward execute( 90 ComponentContext context, 91 ActionMapping mapping, 92 ActionForm form, 93 HttpServletRequest request, 94 HttpServletResponse response) 95 throws Exception { 96 97 log.debug("Enter Rss Channel Action"); 98 99 ActionMessages errors = new ActionMessages(); 100 101 104 List channels = (List ) context.getAttribute(CHANNEL_URLS_KEY); 105 if (channels == null) { 106 Object url = context.getAttribute(CHANNEL_URL_KEY); 107 channels = new ArrayList (1); 108 channels.add(url); 109 } 110 111 log.debug("urls count" + channels.size()); 112 113 List channelBeans = new ArrayList (channels.size()); 115 try { 116 for (int i = 0; i < channels.size(); i++) { 117 RSSDigester digester = new RSSDigester(); 118 String url = (String ) channels.get(i); 119 if (url.startsWith("/")) { 121 url = toFullUrl(request, url); 122 } 123 124 log.debug("Channel url=" + url); 125 126 Channel obj = (Channel) digester.parse(url); 127 128 log.debug("Channel:" + obj); 129 130 channelBeans.add(obj); 131 } 132 133 } catch (Throwable t) { 134 errors.add( 135 ActionMessages.GLOBAL_MESSAGE, 136 new ActionMessage("rss.access.error")); 137 138 servlet.log(t.toString()); 139 } 140 141 if (!errors.isEmpty()) { 143 this.saveErrors(request, errors); 144 146 log.debug("Exit Rss Channel Action : error"); 147 148 return null; 149 } 150 151 153 log.debug("Exit Rss Channel Action"); 154 155 context.putAttribute(CHANNELS_KEY, channelBeans); 157 158 return null; 159 } 160 161 164 private String toFullUrl(HttpServletRequest request, String url) { 165 StringBuffer buff = new StringBuffer (); 166 167 buff.append(request.getScheme()).append("://").append( 168 request.getServerName()); 169 170 if (request.getServerPort() != 80) { 171 buff.append(":").append(request.getServerPort()); 172 } 173 174 buff.append(request.getContextPath()).append(url); 175 176 return buff.toString(); 177 } 178 179 } 180 | Popular Tags |