📄 themeeditoraction.java
字号:
package org.roller.presentation.website.actions;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.struts.action.ActionError;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import org.roller.RollerException;import org.roller.model.UserManager;import org.roller.pojos.PageData;import org.roller.pojos.UserData;import org.roller.pojos.WebsiteData;import org.roller.presentation.RollerContext;import org.roller.presentation.RollerRequest;import org.roller.presentation.pagecache.PageCacheFilter;import org.roller.presentation.velocity.PreviewResourceLoader;import org.roller.presentation.website.ThemeCache;import org.roller.presentation.website.formbeans.ThemeEditorForm;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.roller.config.RollerRuntimeConfig;//////////////////////////////////////////////////////////////////////////////** * Actions for theme chooser page. * * @author llavandowska * * @struts.action name="themeEditorForm" path="/editor/themeEditor" * scope="session" parameter="method" * * @struts.action-forward name="editTheme.page" path="/website/theme-editor.jsp" */public class ThemeEditorAction extends DispatchAction{ private static final String SESSION_TEMPLATE = "weblog.template"; private static final String LAST_THEME = "weblog.prev.theme"; private static Log mLogger = LogFactory.getFactory().getInstance(ThemeEditorAction.class); private ThemeCache themeCache = ThemeCache.getInstance(); /** * Take user to edit theme page. * * @param mapping Struts action mapping. * @param form Theme editor form bean. * @param request Servlet request. * @param response Servlet response. * @return Forward to edit-website page. * @throws IOException * @throws ServletException */ //----------------------------------------------------------------------- public ActionForward edit( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ActionErrors errors = new ActionErrors(); ActionForward forward = mapping.findForward("editTheme.page"); try { RollerRequest rreq = RollerRequest.getRollerRequest(request); if ( rreq.isUserAuthorizedToEdit() ) { loadThemes( rreq, errors, true); ThemeEditorForm teForm = (ThemeEditorForm)form; teForm.setThemeName(null); // start fresh if (mLogger.isDebugEnabled()) { mLogger.debug("loaded themes, form="+teForm); } // // if a custom template has been previewed already,// // it'll be in memory.// String template = // (String)request.getSession().getAttribute(SESSION_TEMPLATE);// // if (mLogger.isDebugEnabled())// {// mLogger.debug("got template="+template);// }// // if (StringUtils.isNotEmpty(template))// {// // load the template in memory// teForm.setThemeTemplate( template );// // if (mLogger.isDebugEnabled())// {// mLogger.debug("set template");// }// }// // otherwise the "custom" template will need be loaded// // from the current page.// else// { // clear any previously set themes clearThemePages(rreq, (String)request.getSession(true).getAttribute(LAST_THEME)); // load the current default page PageData page = getDefaultPage( rreq ); teForm.setThemeTemplate( page.getTemplate() ); //} } else { forward = mapping.findForward("access-denied"); } } catch (Exception e) { mLogger.error("ERROR in action",e); throw new ServletException(e); } return forward; } //----------------------------------------------------------------------- /** * Load the template/theme to be previewed. The template must be stashed * in PreviewResourceLoader so that PreviewServlet can find it. * * @param mapping Struts action mapping. * @param form Theme editor form bean. * @param request Servlet request. * @param response Servlet response. * @return Forward to edit-website page. * @throws IOException * @throws ServletException */ public ActionForward preview( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ActionErrors errors = new ActionErrors(); ActionForward forward = mapping.findForward("editTheme.page"); try { RollerRequest rreq = RollerRequest.getRollerRequest(request); if ( rreq.isUserAuthorizedToEdit() ) { HttpSession session = request.getSession(); ThemeEditorForm teForm = (ThemeEditorForm)form; String theme = teForm.getThemeName(); ServletContext ctx = rreq.getServletContext(); RollerContext rollerContext = RollerContext.getRollerContext( ctx ); boolean showCustom = false; if ( !"Custom".equals( theme ) ) { // if it isn't a custom template, load it from file String sb = this.readTheme(rollerContext, theme); teForm.setThemeTemplate( sb ); // clear any previously set themes clearThemePages(rreq, (String) session.getAttribute(LAST_THEME)); setThemePages(rreq, theme); session.setAttribute(LAST_THEME, theme); } else { showCustom = true; clearThemePages(rreq, (String) session.getAttribute(LAST_THEME)); session.removeAttribute(LAST_THEME); //session.removeAttribute(SESSION_TEMPLATE); //UserData ud = rreq.getUser(); //PreviewResourceLoader.clearAllTemplates( ud.getUserName()); } loadThemes( rreq, errors, showCustom); // put the template where PreviewServlet // will be able to find it PageData page = getDefaultPage( rreq ); PreviewResourceLoader.setTemplate(page.getId(), teForm.getThemeTemplate(), rreq.getUser().getUserName() ); // save the template in session for later editing session.setAttribute(SESSION_TEMPLATE, teForm.getThemeTemplate() ); } else { forward = mapping.findForward("access-denied"); } } catch (Exception e) { mLogger.error("ERROR in action",e); throw new ServletException(e); } return forward; } //----------------------------------------------------------------------- /** * Save the selected Theme or edited template as the Weblog pages template. * * @param mapping Struts action mapping. * @param form Theme editor form bean. * @param request Servlet request. * @param response Servlet response. * @return Forward to edit-website page. * @throws IOException * @throws ServletException */ public ActionForward save( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ActionErrors errors = new ActionErrors(); ActionForward forward = mapping.findForward("editTheme.page"); try { RollerRequest rreq = RollerRequest.getRollerRequest(request); if ( rreq.isUserAuthorizedToEdit() ) { loadThemes( rreq, errors, true); ThemeEditorForm teForm = (ThemeEditorForm)form; String theme = teForm.getThemeName(); ServletContext ctx = rreq.getServletContext(); RollerContext rollerContext = RollerContext.getRollerContext( ctx ); // load the template either from the Form // or from the disk (if its a stock Theme). String template = ""; if ( "Custom".equals( theme ) ) { // use the edited template template = teForm.getThemeTemplate(); } else { // Figure path to new user theme String sb = this.readTheme(rollerContext, theme); template = sb; } // we'll need the User UserData ud = rreq.getUser(); // clear the places holding onto the template PreviewResourceLoader.clearAllTemplates(ud.getUserName()); request.getSession().removeAttribute(SESSION_TEMPLATE); // store the template in the page UserManager mgr = rreq.getRoller().getUserManager(); PageData page = getDefaultPage( rreq ); page.setTemplate( template ); mgr.storePage( page); saveThemePages( rreq, theme); // put them into the PreviewResourceLoader also setThemePages(rreq, theme); // clear the page cache PageCacheFilter.removeFromCache( request, ud ); teForm.setThemeName("Custom"); } else { forward = mapping.findForward("access-denied"); } } catch (Exception e) { mLogger.error("ERROR in action",e); throw new ServletException(e); } return forward; } /** * Cancel choosing of theme. * * @param mapping Struts action mapping. * @param form Theme editor form bean. * @param request Servlet request. * @param response Servlet response. * @return Forward to edit-website page. * @throws IOException * @throws ServletException */ public ActionForward cancel(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -