📄 pagehelper.java
字号:
package org.roller.presentation.velocity;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.struts.Globals;import org.apache.struts.util.RequestUtils;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;import org.apache.velocity.context.Context;import org.roller.RollerException;import org.roller.pojos.RefererData;import org.roller.pojos.UserData;import org.roller.pojos.WeblogEntryData;import org.roller.presentation.LanguageUtil;import org.roller.presentation.RollerContext;import org.roller.presentation.RollerRequest;import org.roller.presentation.tags.calendar.CalendarModel;import org.roller.presentation.tags.calendar.CalendarTag;import org.roller.presentation.tags.menu.EditorNavigationBarTag;import org.roller.presentation.tags.menu.MenuTag;import org.roller.presentation.weblog.tags.BigWeblogCalendarModel;import org.roller.presentation.weblog.tags.WeblogCalendarModel;import org.roller.util.StringUtils;import java.io.StringWriter;import java.net.MalformedURLException;import java.util.ArrayList;import java.util.Collection;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Locale;import java.util.Vector;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.PageContext;/** * Provides assistance to VelociMacros, filling in where Velocity falls. * * @author llavandowska * @author David M Johnson * */public class PageHelper{ private static Log mLogger = LogFactory.getFactory().getInstance(PageHelper.class); private Context mVelocityContext = null; private PageContext mPageContext = null; private HttpServletResponse mResponse = null; private RollerRequest mRollerReq = null; private String mUsername = null; private Collection mPagePlugins = new ArrayList(); private boolean mSkipFlag = false; //------------------------------------------------------------------------ /** * Initialize VelocityHelper, setting the variables it will be hiding from * the Velocimacros. */ public PageHelper( RollerRequest rreq, HttpServletResponse response, Context ctx) { mVelocityContext = ctx; mRollerReq = rreq; mResponse = response; if (rreq != null) { mPageContext = rreq.getPageContext(); UserData user = null; if ( rreq.getRequest().getAttribute(RollerRequest.OWNING_USER) != null) { user = (UserData) rreq.getRequest().getAttribute(RollerRequest.OWNING_USER); } else if ( rreq.getUser() != null ) { user = rreq.getUser(); } if ( user != null ) { mUsername = user.getUserName(); } } if (mVelocityContext == null) mVelocityContext = new VelocityContext(); } //------------------------------------------------------------------------ /** * Initialized VelocityHelper without a Velocity Context. */ public PageHelper(RollerRequest rreq, HttpServletResponse response) { this(rreq, response, null); } //------------------------------------------------------------------------ /** * Return a PageHelper with a new VelocityContext. */ public static PageHelper createPageHelper( HttpServletRequest request, HttpServletResponse response) { Context ctx = (Context)(new VelocityContext()); RollerRequest rreq = RollerRequest.getRollerRequest(request); PageHelper pageHelper = new PageHelper(rreq, response, ctx); pageHelper.initializePlugins(ContextLoader.getPagePlugins()); return pageHelper; } //------------------------------------------------------------------------ /** * Create individual instances of the PagePlugins for use by this PageHelper. */ protected void initializePlugins(Collection pluginClasses) { Iterator it = pluginClasses.iterator(); while (it.hasNext()) { try { PagePlugin plugin = (PagePlugin)it.next(); plugin.init(mRollerReq, mVelocityContext); mPagePlugins.add(plugin); } catch (RollerException e) { mLogger.warn("Unable to init() PagePlugin: ", e ); } } } //------------------------------------------------------------------------ /** * This is a quasi-hack: there are places we don't want to render the * ReadMore Plugin in particular (I cannot think of other plugins * which warrant this treatment). The "skip flag" will be made * available to the Plugin if it wants to check to see if it should * be skipped. */ public void setSkipFlag(boolean skip) { mSkipFlag = skip; } //------------------------------------------------------------------------ /** * Another stupid helper method to make up for the shortcomings of Velocity. * @return HashMap */ public Hashtable addParam(String key, String value, Hashtable map) { if (map == null) map = new Hashtable(); if (key != null && value != null) map.put(key, value); return map; } //------------------------------------------------------------------------ /** * Evaluates the String as a Velocimacro, returning the results. * * @param str String * @return String */ public String evaluateString(String str) { if (mVelocityContext == null) return str; StringWriter sw = new StringWriter(); try { Velocity.evaluate( mVelocityContext, sw, "evalStr", str ); return sw.toString(); } catch (Exception e) { mLogger.warn("VelocityHelper.evaluateString()", e); } return ""; } /** Build the URL for editing an WeblogEntry **/ public String getEntryEditUrl(WeblogEntryData entry) { Hashtable params = new Hashtable(); params.put( RollerRequest.WEBLOGENTRYID_KEY, entry.getId()); params.put( RollerRequest.ANCHOR_KEY, entry.getAnchor()); if (mUsername != null) { params.put( RollerRequest.USERNAME_KEY, mUsername); } try { return RequestUtils.computeURL( mPageContext, "weblogEdit", null, null, null, params, null, false); } catch (MalformedURLException mue) { mLogger.warn("RollerRequest.editEntryUrl exception: ", mue); } return mRollerReq.getRequest().getContextPath() + "edtior/weblog.do?method=edit"; } //------------------------------------------------------------------------- public String getToggleLinkbackDisplayHTML(RefererData referer) { String ret = ""; String link = null; try { if ( mRollerReq.isUserAuthorizedToEdit() ) { Hashtable params = new Hashtable(); params.put( RollerRequest.REFERERID_KEY, referer.getId()); params.put( RollerRequest.USERNAME_KEY, mUsername); link = RequestUtils.computeURL( mPageContext, "toggleLinkback", null, null, null, params,null,false); StringBuffer sb = new StringBuffer(); sb.append("[<a href=\""); sb.append(link); if ( referer.getVisible().booleanValue() ) { sb.append("\">Visible</a>] "); } else { sb.append("\">Hidden</a>] "); } ret = sb.toString(); } } catch (Exception e) { // should never happen, but if it does: mLogger.error("ERROR creating toggle-linkback URL",e); } return ret; } //------------------------------------------------------------------------ public boolean isUserAuthorizedToEdit() { try { return mRollerReq.isUserAuthorizedToEdit(); } catch (Exception e) { mLogger.warn("PageHelper.isUserAuthorizedToEdit)", e); } return false; } //------------------------------------------------------------------------ public void setContentType( String type ) { mResponse.setContentType(type); } //------------------------------------------------------------------------ /** * Display big weblog calendar, well suited for an archive page. * @return HTML for calendar. */ public String showBigWeblogCalendar() { return showWeblogCalendar(true, null); } //------------------------------------------------------------------------ /** * Call hybrid EditorNavBarTag to render editor navbar. * @param vertical True for vertical navbar. * @return String HTML for navbar. */ public String showEditorNavBar(boolean vertical) { EditorNavigationBarTag editorTag = new EditorNavigationBarTag(); editorTag.setPageContext(mPageContext); if ( vertical ) { editorTag.setView("/navbar-vertical.vm"); } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -