You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/06/09 05:19:20 UTC
svn commit: r189695 [39/67] - in /incubator/roller/trunk: ./ contrib/
contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/
contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/
contrib/plugins/src/org/roller/presentation/velocity/
contrib/plugins/src/org/roller/presentation/velocity/plugins/
contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/
contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/
contrib/plugins/src/org/roller/presentation/velocity/plugins/email/
contrib/plugins/src/org/roller/presentation/velocity/plugins/jspwiki/
contrib/plugins/src/org/roller/presentation/velocity/plugins/radeox/
contrib/plugins/src/org/roller/presentation/velocity/plugins/readmore/
contrib/plugins/src/org/roller/presentation/velocity/plugins/smileys/
contrib/plugins/src/org/roller/presentation/velocity/plugins/textile/
contrib/plugins/src/org/roller/presentation/velocity/plugins/topictag/
custom/ custom/src/ custom/web/ docs/ docs/images/ docs/installguide/
docs/installguide/old/ docs/userguide/ docs/userguide/images/
docs/userguide/old/ metadata/ metadata/database/
metadata/database/hibernate/ metadata/xdoclet/ nbproject/ personal/
personal/eclipse/ personal/testing/ sandbox/ sandbox/planetroller/
sandbox/planetroller/metadata/ sandbox/planetroller/metadata/database/
sandbox/planetroller/src/ sandbox/planetroller/src/org/
sandbox/planetroller/src/org/roller/
sandbox/planetroller/src/org/roller/tools/
sandbox/planetroller/src/org/roller/tools/planet/
sandbox/planetroller/templates/ sandbox/planetroller/test/
sandbox/planetroller/test/org/ sandbox/planetroller/test/org/roller/
sandbox/planetroller/test/org/roller/model/
sandbox/planetroller/test/org/roller/tools/
sandbox/planetroller/test/org/roller/tools/planet/
sandbox/planetroller/testdata/ sandbox/planetroller/testdata/cache/
sandbox/planetroller/testdata/output/ sandbox/standalone/
sandbox/standalone/jspwiki/ sandbox/standalone/jspwiki/default/
sandbox/standalone/jspwiki/default/images/ sandbox/standalone/lib/
sandbox/standalone/src/ sandbox/standalone/src/org/
sandbox/standalone/src/org/roller/ sandbox/standalone/src/org/roller/jspwiki/
sandbox/standalone/src/org/roller/tomcat/
sandbox/standalone/src/org/roller/util/ sandbox/standalone/tests/
sandbox/standalone/tests/org/ sandbox/standalone/tests/org/roller/
sandbox/standalone/tests/org/roller/util/ sandbox/standalone/tomcat/ src/
src/org/ src/org/roller/ src/org/roller/business/
src/org/roller/business/hibernate/ src/org/roller/business/search/
src/org/roller/business/search/operations/ src/org/roller/business/utils/
src/org/roller/config/ src/org/roller/config/runtime/ src/org/roller/model/
src/org/roller/pojos/ src/org/roller/presentation/
src/org/roller/presentation/atomapi/ src/org/roller/presentation/bookmarks/
src/org/roller/presentation/bookmarks/actions/
src/org/roller/presentation/bookmarks/formbeans/
src/org/roller/presentation/bookmarks/tags/
src/org/roller/presentation/filters/ src/org/roller/presentation/forms/
src/org/roller/presentation/newsfeeds/ src/org/roller/presentation/pagecache/
src/org/roller/presentation/pagecache/rollercache/
src/org/roller/presentation/pings/ src/org/roller/presentation/planet/
src/org/roller/presentation/tags/ src/org/roller/presentation/tags/calendar/
src/org/roller/presentation/tags/menu/ src/org/roller/presentation/util/
src/org/roller/presentation/velocity/ src/org/roller/presentation/weblog/
src/org/roller/presentation/weblog/actions/
src/org/roller/presentation/weblog/formbeans/
src/org/roller/presentation/weblog/tags/ src/org/roller/presentation/website/
src/org/roller/presentation/website/actions/
src/org/roller/presentation/website/formbeans/
src/org/roller/presentation/website/tags/
src/org/roller/presentation/xmlrpc/ src/org/roller/util/
src/org/roller/util/rome/ tests/ tests/org/ tests/org/roller/
tests/org/roller/ant/ tests/org/roller/business/
tests/org/roller/presentation/ tests/org/roller/presentation/atomapi/
tests/org/roller/presentation/bookmarks/
tests/org/roller/presentation/filters/
tests/org/roller/presentation/velocity/
tests/org/roller/presentation/velocity/plugins/
tests/org/roller/presentation/velocity/plugins/smileys/
tests/org/roller/presentation/velocity/plugins/textile/
tests/org/roller/presentation/weblog/ tests/org/roller/presentation/xmlrpc/
tests/org/roller/util/ tests/org/roller/util/rome/ tools/ tools/buildtime/
tools/buildtime/ant-1.6.2/ tools/buildtime/findbugs/
tools/buildtime/findbugs/lib/ tools/buildtime/findbugs/plugin/
tools/buildtime/mockrunner-0.3/ tools/buildtime/mockrunner-0.3/lib/
tools/buildtime/mockrunner-0.35/ tools/buildtime/mockrunner-0.35/lib/
tools/buildtime/tomcat-4.1.24/ tools/buildtime/xdoclet-1.2/
tools/buildtime/xdoclet-1.2/lib/ tools/hibernate-2.1/
tools/hibernate-2.1/lib/ tools/lib/ tools/standard-1.0.3/
tools/standard-1.0.3/lib/ tools/standard-1.0.3/tld/ tools/struts-1.2.4/
tools/struts-1.2.4/lib/ web/ web/WEB-INF/ web/WEB-INF/classes/
web/WEB-INF/classes/flavors/ web/WEB-INF/classes/themes/ web/bookmarks/
web/editor/ web/editor/images/ web/images/ web/images/editor/
web/images/midas/ web/images/preview/ web/images/smileys/ web/planet/
web/tags/ web/templates/ web/theme/ web/theme/images/ web/theme/lavender/
web/theme/scripts/ web/theme/scripts/classes/ web/themes/ web/themes/basic/
web/themes/berkley/ web/themes/berkley/images/ web/themes/brushedmetal/
web/themes/brushedmetal/images/ web/themes/cheb/ web/themes/cheb/images/
web/themes/cheb/scripts/ web/themes/clean/ web/themes/currency-i18n/
web/themes/currency-i18n/images/ web/themes/currency/
web/themes/currency/images/ web/themes/grey2/ web/themes/moonshine/
web/themes/movablemanila/ web/themes/movablemanila/images/
web/themes/pacifica/ web/themes/robot/ web/themes/rolling/
web/themes/rolling/images/ web/themes/sotto/ web/themes/sotto/images/
web/themes/sotto/styles/ web/themes/sunsets/ web/themes/sunsets/images/
web/themes/sunsets/scripts/ web/themes/sunsets/styles/ web/themes/werner/
web/themes/x2/ web/themes/x2/images/ web/themes/x2/scripts/
web/themes/x2/styles/ web/weblog/ web/website/
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,208 @@
+ /*
+ * Created on Feb 27, 2004
+ */
+package org.roller.presentation.weblog.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.util.RequestUtils;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.velocity.PageHelper;
+import org.roller.util.Utilities;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * Apply configured PagePlugins to WeblogEntryData and display the result.
+ * @jsp.tag name="ApplyPlugins"
+ * @author David M Johnson
+ */
+public class ApplyPluginsTag extends TagSupport
+{
+ static final long serialVersionUID = 3166731504235428544L;
+
+ private static final String HELPER_KEY = "roller.pageHelper";
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(ApplyPluginsTag.class);
+
+ private String name = null;
+ private String property = null;
+ private String scope = "request";
+
+ private boolean stripHtml = false;
+ private int maxLength = -1;
+ private boolean skipFlag = false;
+
+ /**
+ * @see javax.servlet.jsp.tagext.Tag#doStartTag()
+ */
+ public int doStartTag() throws JspException
+ {
+ WeblogEntryData entry =
+ (WeblogEntryData)RequestUtils.lookup(pageContext, name, property, scope);
+
+ String xformed = null;
+
+ if (entry.getPlugins() != null)
+ {
+ // check to see if a PageHelper has already been created this request
+ PageHelper helper = (PageHelper)pageContext.getRequest().getAttribute(HELPER_KEY);
+ if (helper == null)
+ {
+ helper = loadNewPageHelper();
+ }
+ helper.setSkipFlag(skipFlag);
+
+ xformed = helper.renderPlugins(entry);
+ }
+ else
+ {
+ xformed = entry.getText();
+ }
+
+ if (stripHtml)
+ {
+ // don't escape ampersands
+ xformed = Utilities.escapeHTML( Utilities.removeHTML(xformed), false );
+ }
+
+ if (maxLength != -1)
+ {
+ xformed = Utilities.truncateNicely(xformed, maxLength, maxLength, "...");
+ }
+
+ // somehow things (“) are getting double-escaped
+ // but I cannot seem to track it down
+ xformed = Utilities.stringReplace(xformed, "&#", "&#");
+
+ try
+ {
+ pageContext.getOut().println(xformed);
+ }
+ catch (IOException e)
+ {
+ throw new JspException("ERROR applying plugin to entry", e);
+ }
+ return TagSupport.SKIP_BODY;
+ }
+
+ /**
+ * PagePlugins need to be loaded and properly initialized for use.
+ * Also, store the PageHelper in the Request as it will likely be
+ * used more than once and this way we can skip a fair amount of overhead.
+ */
+ private PageHelper loadNewPageHelper()
+ {
+ PageHelper pageHelper = PageHelper.createPageHelper(
+ (HttpServletRequest)pageContext.getRequest(),
+ (HttpServletResponse)pageContext.getResponse());
+
+ pageContext.getRequest().setAttribute(HELPER_KEY, pageHelper);
+ return pageHelper;
+ }
+
+ /**
+ * Maximum length of text displayed, only applies if stripHtml is true.
+ * @jsp.attribute required="false"
+ * @return Returns the maxLength.
+ */
+ public int getMaxLength()
+ {
+ return maxLength;
+ }
+
+ /**
+ * Maximum length of text displayed, only applies if stripHtml is true.
+ * @param maxLength The maxLength to set.
+ */
+ public void setMaxLength(int maxLength)
+ {
+ this.maxLength = maxLength;
+ }
+
+ /**
+ * Set to true to strip all HTML markup from output.
+ * @jsp.attribute required="false"
+ * @return Returns the stripHtml.
+ */
+ public boolean getStripHtml()
+ {
+ return stripHtml;
+ }
+
+ /**
+ * Set to true to strip all HTML markup from output.
+ * @param stripHtml The stripHtml to set.
+ */
+ public void setStripHtml(boolean stripHtml)
+ {
+ this.stripHtml = stripHtml;
+ }
+
+ /**
+ * Set to true to inform PagePlugins if they
+ * should "skip" themselves.
+ *
+ * @jsp.attribute required="false"
+ * @return Returns the skipFlag.
+ */
+ public boolean getSkipFlag()
+ {
+ return skipFlag;
+ }
+
+ /**
+ * Set to true to inform PagePlugins if they
+ * should "skip" themselves.
+ * @param skipFlag The skipFlag to set.
+ */
+ public void setSkipFlag(boolean skipFlag)
+ {
+ this.skipFlag = skipFlag;
+ }
+
+ /**
+ * @return Returns the name.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @jsp.attribute required="true"
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return Returns the property.
+ */
+ public String getProperty() {
+ return property;
+ }
+ /**
+ * @jsp.attribute required="false"
+ */
+ public void setProperty(String property) {
+ this.property = property;
+ }
+
+ /**
+ * @jsp.attribute required="false"
+ */
+ public String getScope() {
+ return scope;
+ }
+ /**
+ * @param scope The scope to set.
+ */
+ public void setScope(String scope) {
+ this.scope = scope;
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,193 @@
+package org.roller.presentation.weblog.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.util.DateUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Model for big calendar that displays titles for each day.
+ * @author David M Johnson
+ */
+public class BigWeblogCalendarModel extends WeblogCalendarModel
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(BigWeblogCalendarModel.class);
+
+ protected static final SimpleDateFormat mStarDateFormat =
+ DateUtil.get8charDateFormat();
+
+ protected static final SimpleDateFormat mSingleDayFormat =
+ new SimpleDateFormat("dd");
+
+ /**
+ * @param rreq
+ * @param res
+ * @param url
+ * @param cat
+ */
+ public BigWeblogCalendarModel(RollerRequest rreq, HttpServletResponse res,
+ String url, String cat)
+ {
+ super(rreq, res, url, cat);
+ }
+
+ /**
+ * @param startDate
+ * @param endDate
+ */
+ protected void loadWeblogEntries(Date startDate, Date endDate, String catName)
+ {
+ try
+ {
+ WeblogManager mgr = mRollerReq.getRoller().getWeblogManager();
+ mMonthMap = mgr.getWeblogEntryObjectMap(
+ mRollerReq.getWebsite(), // userName
+ startDate, // startDate
+ endDate, // endDate
+ catName, // catName
+ WeblogManager.PUB_ONLY, // status
+ null
+ );
+ }
+ catch (RollerException e)
+ {
+ mLogger.error(e);
+ mMonthMap = new HashMap();
+ }
+ }
+
+ /**
+ * Create URL for use on view-weblog page, ignores query-string.
+ * @param day Day for URL
+ * @param valid Always return a URL, never return null
+ * @return URL for day, or null if no weblog entry on that day
+ */
+ public String computeUrl(Date day, boolean valid)
+ {
+ String url = null;
+ try
+ {
+ if ( day == null )
+ {
+ url = mRes.encodeURL(mSelfUrl + mCatName);
+ }
+ else
+ {
+ // get the 8 char YYYYMMDD datestring for day, returns null
+ // if no weblog entry on that day
+ String dateString = null;
+ List entries =
+ (List)mMonthMap.get( day );
+ if ( entries != null && day != null )
+ {
+ WeblogEntryData entry = (WeblogEntryData)entries.get(0);
+ dateString =
+ mStarDateFormat.format(entry.getPubTime());
+
+ // append 8 char date string on end of selfurl
+ url = mRes.encodeURL(mSelfUrl+"/"+dateString+mCatName);
+ }
+ else if ( entries != null )
+ {
+ url = mRes.encodeURL(mSelfUrl+"/"+mCatName);
+ }
+ else if ( valid )
+ {
+ // Make the date yyyyMMdd and append it to URL
+ dateString = mStarDateFormat.format( day );
+ url = mRes.encodeURL(mSelfUrl+"/"+dateString+mCatName);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ RollerRequest.getRollerRequest(mReq)
+ .getServletContext().log("ERROR: creating URL",e);
+ }
+ return url;
+ }
+
+ /**
+ * @see org.roller.presentation.tags.calendar.CalendarModel#getContent(Date, boolean)
+ */
+ public String getContent(Date day)
+ {
+ String content = null;
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(mReq);
+ RollerContext rctx =
+ RollerContext.getRollerContext(rreq.getServletContext());
+ StringBuffer sb = new StringBuffer();
+
+ // get the 8 char YYYYMMDD datestring for day, returns null
+ // if no weblog entry on that day
+ String dateString = null;
+ List entries = (List)mMonthMap.get(day);
+ if ( entries != null )
+ {
+ dateString = mStarDateFormat.format(
+ ((WeblogEntryData)entries.get(0)).getPubTime());
+
+ // append 8 char date string on end of selfurl
+ String dayUrl = mRes.encodeURL(mSelfUrl+"/"+ dateString+mCatName );
+
+ sb.append("<div class=\"hCalendarDayTitleBig\">");
+ sb.append("<a href=\"");
+ sb.append( dayUrl );
+ sb.append("\">");
+ sb.append( mSingleDayFormat.format( day ) );
+ sb.append("</a></div>");
+
+ for ( int i=0; i<entries.size(); i++ )
+ {
+ sb.append("<div class=\"bCalendarDayContentBig\">");
+ sb.append("<a href=\"");
+ sb.append(rctx.createEntryPermalink(
+ (WeblogEntryData)entries.get(i),mReq,false));
+ sb.append("\">");
+
+ String title = ((WeblogEntryData)entries.get(i)).getTitle().trim();
+ if ( title.length()==0 )
+ {
+ title = ((WeblogEntryData)entries.get(i)).getAnchor();
+ }
+ if ( title.length() > 20 )
+ {
+ title = title.substring(0,20)+"...";
+ }
+
+ sb.append( title );
+ sb.append("</a></div>");
+ }
+
+ }
+ else
+ {
+ sb.append("<div class=\"hCalendarDayTitleBig\">");
+ sb.append( mSingleDayFormat.format( day ) );
+ sb.append("</div>");
+ sb.append("<div class=\"bCalendarDayContentBig\"/>");
+ }
+ content = sb.toString();
+ }
+ catch (Exception e)
+ {
+ RollerRequest.getRollerRequest(mReq)
+ .getServletContext().log("ERROR: creating URL",e);
+ }
+ return content;
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/DateMacro.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/DateMacro.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/DateMacro.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/DateMacro.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,36 @@
+package org.roller.presentation.weblog.tags;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/** For formatting a date using patterns from
+ * {@link java.text.SimpleDateFormat SimpleDateFormat}.
+ * @deprecated Use methods on
+ * {@link org.roller.presentation.weblog.WeblogEntryDataEx WeblogEntryDataEx}
+ * instead.
+ */
+public class DateMacro
+{
+ final Date mDate;
+
+ /** Construct macro for specified date */
+ public DateMacro( Date d )
+ {
+ mDate = d;
+ }
+
+ /** Format date using pattern */
+ public String view( String pattern )
+ {
+ SimpleDateFormat format = new SimpleDateFormat( pattern );
+ return format.format( mDate );
+ }
+
+ /** Format date using standard format. */
+ public String toString()
+ {
+ return view("EEEE MMMM dd, yyyy");
+ }
+}
+
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,104 @@
+
+package org.roller.presentation.weblog.tags;
+
+import org.roller.model.WeblogManager;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.tags.menu.RollerMenuModel;
+import org.roller.util.DateUtil;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Calendar model for calendar intended for use on edit-weblog page.
+ */
+public class EditWeblogCalendarModel extends WeblogCalendarModel
+{
+ protected String mQueryString = null;
+
+ /**
+ * @param req
+ * @param resp
+ * @param selfUrl
+ * @param queryString */
+ public EditWeblogCalendarModel(
+ RollerRequest rreq, HttpServletResponse res, String url)
+ {
+ super( rreq, res, url, null );
+ }
+
+ /**
+ * Create URL for use on edit-weblog page, preserves the request
+ * parameters used by the tabbed-menu tag for navigation.
+ *
+ * @param day Day for URL
+ * @param valid Always return a URL, never return null
+ * @return URL for day, or null if no weblog entry on that day
+ */
+ public String computeUrl( java.util.Date day, boolean valid )
+ {
+ String url = null;
+ try
+ {
+ boolean haveWeblogEntry = true;
+
+ if ( day == null )
+ {
+ url = mRes.encodeURL(mSelfUrl + mCatName);
+ }
+ else
+ {
+ // get the 8 char YYYYMMDD datestring for day, returns null
+ // if no weblog entry on that day
+ String dateString = (String)mMonthMap.get( day );
+
+ if ( dateString == null )
+ {
+ haveWeblogEntry = false;
+
+ // no weblog entry and no date, so use today as the date
+ dateString = DateUtil.format8chars( day );
+ }
+
+ if ( haveWeblogEntry || valid )
+ {
+ // create URL with params for day, menu, and menu item
+ StringBuffer sb = new StringBuffer();
+ sb.append( mSelfUrl );
+
+ sb.append( '&' );
+ sb.append( RollerRequest.WEBLOGDAY_KEY);
+ sb.append( '=' );
+ sb.append( dateString );
+
+ //sb.append( "&method=edit" );
+
+ if (mReq.getParameter(RollerMenuModel.MENU_KEY) != null )
+ {
+ sb.append( '&' );
+ sb.append( RollerMenuModel.MENU_KEY );
+ sb.append( '=' );
+ sb.append(mReq.getParameter(RollerMenuModel.MENU_KEY));
+ }
+ if (mReq.getParameter(RollerMenuModel.MENU_ITEM_KEY)!=null)
+ {
+ sb.append( '&' );
+ sb.append( RollerMenuModel.MENU_ITEM_KEY );
+ sb.append( '=' );
+ sb.append(
+ mReq.getParameter(RollerMenuModel.MENU_ITEM_KEY));
+ }
+ url = mRes.encodeURL( sb.toString() );
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ RollerRequest.getRollerRequest(mReq).getServletContext().log("ERROR: creating URL",e);
+ }
+ return url;
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/RssBadgeTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/RssBadgeTag.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/RssBadgeTag.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/RssBadgeTag.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,58 @@
+
+package org.roller.presentation.weblog.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.pojos.UserData;
+import org.roller.presentation.RollerRequest;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+/**
+ * @jsp.tag name="RssBadge"
+ */
+public class RssBadgeTag extends org.roller.presentation.tags.HybridTag
+{
+ static final long serialVersionUID = 8569693454388788128L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RssBadgeTag.class);
+
+ //------------------------------------------------------------------------
+ /**
+ * Process start tag.
+ * @return EVAL_SKIP_BODY
+ */
+ public int doStartTag( PrintWriter pw ) throws JspException
+ {
+ try
+ {
+ HttpServletRequest req =
+ (HttpServletRequest)pageContext.getRequest();
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+
+ UserData ud = rreq.getUser();
+
+ pw.println(
+ "<a href="+"\""+req.getContextPath()+"/rss/"
+ +ud.getUserName()+"\">"
+ +"<img "+"src=\""+req.getContextPath()+"/images/rssbadge.gif\" "
+ +"class=\"rssbadge\" "
+ +"alt=\"XML\""
+ +"/>"
+ +"</a>");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Exception",e);
+ throw new JspException(
+ e.getClass().toString()+": "+e.getMessage(),e);
+ }
+ return Tag.SKIP_BODY;
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,160 @@
+package org.roller.presentation.weblog.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.runtime.RuntimeSingleton;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.PageData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+
+//////////////////////////////////////////////////////////////////////////////
+/**
+ * @jsp.tag name="ViewWeblogEntries"
+ */
+public class ViewWeblogEntriesTag
+ extends org.roller.presentation.tags.HybridTag
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RollerRequest.class);
+
+ /** @jsp.attribute */
+ public String getDayTemplate() { return mDayTemplate; }
+ public void setDayTemplate( String n ) { mDayTemplate = n; }
+ private String mDayTemplate = null;
+
+ /** @jsp.attribute */
+ public String getCatName() { return mCatName; }
+ public void setCatName( String n ) { mCatName = n; }
+ private String mCatName = null;
+
+ /** @jsp.attribute */
+ public int getMaxEntries() { return mMaxEntries; }
+ public void setMaxEntries( int v ) { mMaxEntries = v; }
+ private int mMaxEntries = -1;
+
+ //------------------------------------------------------------------------
+
+ public String view( String catName )
+ {
+ mCatName = catName;
+ return emit();
+ }
+
+ public String view( String catName, int maxEntries )
+ {
+ mCatName = catName;
+ mMaxEntries = maxEntries;
+ return emit();
+ }
+
+ //------------------------------------------------------------------------
+ /**
+ * This doStartTag is for the weblog template implementation
+ * @return EVAL_SKIP_BODY
+ */
+ public int doStartTag( PrintWriter pw ) throws JspException
+ {
+ try
+ {
+ HttpServletRequest req =
+ (HttpServletRequest)pageContext.getRequest();
+
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+
+ // need website so we can get weblog day template
+ WebsiteData website = rreq.getWebsite( );
+
+ String catName = mCatName;
+ if (catName == null)
+ {
+ catName= req.getParameter(RollerRequest.WEBLOGCATEGORYNAME_KEY);
+ }
+
+ String name = null;
+ if ( rreq.getUser() != null )
+ {
+ name = rreq.getUser().getUserName();
+ }
+
+ // get recent weblog entries
+ int max = (mMaxEntries == -1) ? 15 : mMaxEntries;
+ Date dayParam = rreq.getDate(true);
+ WeblogManager mgr = rreq.getRoller().getWeblogManager();
+
+ //Map map = mgr.getRecentWeblogEntries(
+ //name, dayParam, catName, max, true );
+
+ Map map = mgr.getWeblogEntryObjectMap(
+ rreq.getWebsite(), // userName
+ null, // startDate
+ dayParam, // endDate
+ catName, // catName
+ WeblogManager.PUB_ONLY, // status
+ new Integer(max)); // maxEntries
+
+
+ // Get page id if daytemplate is specified
+ String pid = null;
+ if ( mDayTemplate != null )
+ {
+ PageData page =
+ rreq.getRoller().getUserManager().getPageByLink(
+ website, mDayTemplate );
+ if (page != null)
+ {
+ pid = page.getId();
+ }
+ }
+ if ( pid == null )
+ {
+ pid = website.getWeblogDayPageId();
+ }
+
+ // get day template and run it through Velocity
+ Template vtemplate = RuntimeSingleton.getTemplate( pid );
+
+ // through entries, one day per iteration
+ int count = 0;
+ Iterator iter = map.keySet().iterator();
+ while ( iter.hasNext() )
+ {
+ // get date and entries for that date
+ Date d = (Date)iter.next();
+
+ VelocityContext vcontext = new VelocityContext();
+ WeblogEntryMacros macros =
+ new WeblogEntryMacros( pageContext, d );
+ vcontext.put( "macros", macros );
+
+ ArrayList entries = (ArrayList)map.get( d );
+ vcontext.put( "entries", entries );
+
+ vtemplate.merge( vcontext, pw );
+
+ if ( mMaxEntries != -1 && count > mMaxEntries ) break;
+ count++;
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Unexpected exception",e);
+ throw new JspException(e);
+ }
+ return Tag.SKIP_BODY;
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,266 @@
+
+package org.roller.presentation.weblog.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.tags.calendar.CalendarModel;
+import org.roller.util.DateUtil;
+
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Calendar model for calendar intended for use on view-weblog page.
+ */
+public class WeblogCalendarModel implements CalendarModel
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(WeblogCalendarModel.class);
+
+ protected RollerRequest mRollerReq = null;
+ protected HttpServletRequest mReq = null;
+ protected HttpServletResponse mRes = null;
+ protected Map mMonthMap;
+ protected String mSelfUrl;
+ protected Date mDay;
+ protected String mCatName = null;
+ protected Calendar mCalendar = null;
+
+ public WeblogCalendarModel(
+ RollerRequest rreq, HttpServletResponse res, String url, String cat)
+ {
+ mRollerReq = rreq;
+ mReq = rreq.getRequest();
+ mRes = res;
+ mSelfUrl = url;
+
+ setDay( mRollerReq.getDate(true) );
+
+ // If category is specified in URL, then perpetuate it
+ String catKey = RollerRequest.WEBLOGCATEGORYNAME_KEY;
+ String catToUse = mReq.getParameter(catKey);
+ if (mReq.getParameter(catKey) == null)
+ {
+ // If no cat in URL, then use method argument
+ catToUse = cat;
+ }
+ if ( catToUse != null )
+ {
+ mCatName = "?"+catKey+"="+catToUse;
+ }
+ else
+ {
+ mCatName = "";
+ }
+ }
+ /*
+ public static WeblogCalendarModel getInstance(
+ HttpServletRequest req, HttpServletResponse res, String url, String cat)
+ {
+ return new WeblogCalendarModel(RollerRequest.getRollerRequest(req), res, url, cat);
+ }
+*/
+ private void setDay(Date month)
+ {
+ mDay = month;
+
+ // If category is specified in URL, then use it
+ String catName =
+ mReq.getParameter(RollerRequest.WEBLOGCATEGORYNAME_KEY);
+
+ mCalendar = Calendar.getInstance(
+ mRollerReq.getWebsite().getTimeZoneInstance(),
+ mRollerReq.getWebsite().getLocaleInstance()
+ );
+
+ Calendar cal = (Calendar)mCalendar.clone();
+
+ // Compute first second of month
+ cal.setTime(month);
+ cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DAY_OF_MONTH));
+ cal.set(Calendar.HOUR_OF_DAY, cal.getMinimum(Calendar.HOUR_OF_DAY));
+ cal.set(Calendar.MINUTE, cal.getMinimum(Calendar.MINUTE));
+ cal.set(Calendar.SECOND, cal.getMinimum(Calendar.SECOND));
+ cal.set(Calendar.MILLISECOND, cal.getMinimum(Calendar.MILLISECOND));
+ Date startDate = cal.getTime();
+
+ // Compute last second of month
+ cal.set(Calendar.DAY_OF_MONTH, cal.getMaximum(Calendar.DAY_OF_MONTH));
+ cal.set(Calendar.HOUR_OF_DAY, cal.getMaximum(Calendar.HOUR_OF_DAY));
+ cal.set(Calendar.MINUTE, cal.getMaximum(Calendar.MINUTE));
+ cal.set(Calendar.SECOND, cal.getMaximum(Calendar.SECOND));
+ cal.set(Calendar.MILLISECOND, cal.getMaximum(Calendar.MILLISECOND));
+ Date endDate = cal.getTime();
+
+ loadWeblogEntries(startDate, endDate, catName);
+ }
+
+ /**
+ * @param startDate
+ * @param endDate
+ */
+ protected void loadWeblogEntries(Date startDate, Date endDate, String catName)
+ {
+ try
+ {
+ WeblogManager mgr = mRollerReq.getRoller().getWeblogManager();
+ mMonthMap = mgr.getWeblogEntryStringMap(
+ mRollerReq.getWebsite(), // userName
+ startDate, // startDate
+ endDate, // endDate
+ catName, // catName
+ WeblogManager.PUB_ONLY, // status
+ null
+ );
+ }
+ catch (RollerException e)
+ {
+ mLogger.error(e);
+ mMonthMap = new HashMap();
+ }
+ }
+
+ public void setDay(String month) throws Exception
+ {
+ SimpleDateFormat fmt = DateUtil.get8charDateFormat();
+ ParsePosition pos = new ParsePosition(0);
+ setDay( fmt.parse( month, pos ) );
+ }
+
+ public Date getDay()
+ {
+ return (Date)mDay.clone();
+ }
+
+ public String getSelfUrl() throws Exception
+ {
+ return mRes.encodeURL(mSelfUrl);
+ }
+
+ public String getTargetUrl() throws Exception
+ {
+ return getSelfUrl();
+ }
+
+ public String getParameterName()
+ {
+ return RollerRequest.WEBLOGDAY_KEY;
+ }
+
+ public String getParameterValue( Date day )
+ {
+ return (String)mMonthMap.get( day );
+ }
+
+ /**
+ * Create URL for use on view-weblog page, ignores query-string.
+ * @param day Day for URL
+ * @param valid Always return a URL, never return null
+ * @return URL for day, or null if no weblog entry on that day
+ */
+ public String computeUrl(java.util.Date day, boolean valid)
+ {
+ String url = null;
+ try
+ {
+ if ( day == null )
+ {
+ url = mRes.encodeURL(mSelfUrl + mCatName);
+ }
+ else
+ {
+ // get the 8 char YYYYMMDD datestring for day, returns null
+ // if no weblog entry on that day
+ String dateString = (String)mMonthMap.get( day );
+ if ( dateString != null )
+ {
+ // append 8 char date string on end of selfurl
+ url = mRes.encodeURL(mSelfUrl+"/"+dateString+mCatName);
+ }
+ else if ( valid )
+ {
+ // Make the date yyyyMMdd and append it to URL
+ dateString = DateUtil.format8chars( day );
+ url = mRes.encodeURL( mSelfUrl+"/"+dateString+mCatName);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ mRollerReq.getServletContext().log("ERROR: creating URL",e);
+ }
+ return url;
+ }
+
+ /**
+ * @see org.roller.presentation.tags.calendar.CalendarModel#getContent(Date, boolean)
+ */
+ public String getContent(Date day)
+ {
+ return null;
+ }
+
+ public Calendar getCalendar()
+ {
+ return (Calendar)mCalendar.clone();
+ }
+
+ public Date getNextMonth()
+ {
+ Calendar nextCal = getCalendar();
+ nextCal.setTime( mDay );
+ nextCal.add( Calendar.MONTH, 1 );
+ return getFirstDayOfMonth(nextCal).getTime();
+ }
+
+ protected Calendar getFirstDayOfMonth(Calendar cal)
+ {
+ int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
+ cal.set(Calendar.DAY_OF_MONTH, firstDay);
+ return cal;
+ }
+
+ protected Calendar getLastDayOfMonth(Calendar cal)
+ {
+ int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
+ cal.set(Calendar.DAY_OF_MONTH, lastDay);
+ return cal;
+ }
+
+ public String computeNextMonthUrl()
+ {
+ // Create yyyyMMdd dates for next month, prev month and today
+ Calendar nextCal = getCalendar();
+ nextCal.setTime( mDay );
+ nextCal.add( Calendar.MONTH, 1 );
+ Date nextMonth = getLastDayOfMonth(nextCal).getTime();
+ String nextMonthUrl = computeUrl(nextMonth, true);
+ return nextMonthUrl;
+ }
+
+ public String computePrevMonthUrl()
+ {
+ Calendar prevCal = getCalendar();
+ prevCal.setTime( mDay );
+ prevCal.add( Calendar.MONTH, -1 );
+ getLastDayOfMonth( prevCal );
+ String prevMonth = computeUrl(prevCal.getTime(),true);
+ return prevMonth;
+ }
+
+ public String computeTodayMonthUrl()
+ {
+ return computeUrl(null,true);
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,144 @@
+package org.roller.presentation.weblog.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.util.RequestUtils;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.presentation.RollerRequest;
+
+import java.io.PrintWriter;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+
+
+/**
+ * @jsp.tag name="WeblogCatagoryChooser"
+ */
+public class WeblogCategoryChooserTag
+ extends org.roller.presentation.tags.HybridTag
+{
+ static final long serialVersionUID = 1553415977601404703L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(WeblogCategoryChooserTag.class);
+
+ //-------------------------------------------------------------
+ /**
+ * Process start tag.
+ * @return EVAL_SKIP_BODY
+ */
+ public int doStartTag( PrintWriter pw ) throws JspException
+ {
+ try
+ {
+ HttpServletRequest req =
+ (HttpServletRequest)pageContext.getRequest();
+ RollerRequest rreq = RollerRequest.getRollerRequest(
+ (HttpServletRequest)pageContext.getRequest());
+
+ WeblogManager weblogMgr =
+ rreq.getRoller().getWeblogManager();
+
+ UserData user = rreq.getUser();
+ List weblogCats =
+ weblogMgr.getWeblogCategories(rreq.getWebsite(), false);
+
+ String rawUrl = req.getContextPath()+"/page/"+user.getUserName();
+
+ pw.println("<div class=\"rWeblogCategoryChooser\">");
+
+ Hashtable params = new Hashtable();
+ params.put( RollerRequest.USERNAME_KEY, user.getUserName() );
+ String weblog = RequestUtils.computeURL(
+ pageContext,
+ null, // forward
+ rawUrl, // href
+ null, // page
+ null,
+ params, // params
+ null, // anchor
+ false); // redirect
+ String catClass = "rUnchosenCategory";
+ String chosenCat =
+ req.getParameter(RollerRequest.WEBLOGCATEGORYNAME_KEY);
+ if ( chosenCat != null )
+ {
+ pw.println(
+ "<a href=\""+weblog+"\" class=\""+catClass+"\">"
+ + "All" +
+ "</a>");
+ }
+ else
+ {
+ catClass = "rChosenCategory";
+ pw.println(
+ "<span class=\""+catClass+"\">"
+ + "All" +
+ "</span>");
+ }
+
+ for (Iterator wbcItr = weblogCats.iterator(); wbcItr.hasNext(); )
+ {
+ WeblogCategoryData category = (WeblogCategoryData) wbcItr.next();
+ String catName = category.getName();
+
+ // For now don't show root category
+ if (category.getParent() == null) continue;
+
+ params = new Hashtable();
+
+ String pid = pageContext.getRequest().getParameter(
+ RollerRequest.PAGEID_KEY );
+ if (pid != null) params.put( RollerRequest.PAGEID_KEY,pid);
+
+ params.put( RollerRequest.WEBLOGCATEGORYNAME_KEY, catName);
+
+ pw.println(" | ");
+ weblog = RequestUtils.computeURL(
+ pageContext,
+ null, // forward
+ rawUrl, // href
+ null, // page
+ null,
+ params, // params
+ null, // anchor
+ false); // redirect
+
+ catClass = "rUnchosenCategory";
+ chosenCat = req.getParameter(
+ RollerRequest.WEBLOGCATEGORYNAME_KEY);
+ if ( chosenCat != null && chosenCat.equals(catName) )
+ {
+ catClass = "rChosenCategory";
+ pw.println(
+ "<span class=\""+catClass+"\">"
+ + category.getPath() +
+ "</span>");
+ }
+ else
+ {
+ pw.println(
+ "<a href=\""+weblog+"\" class=\""+catClass+"\">"
+ + category.getPath() +
+ "</a>");
+ }
+ }
+
+ pw.println("</div>");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Exception",e);
+ throw new JspException(e);
+ }
+ return Tag.SKIP_BODY;
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,244 @@
+package org.roller.presentation.weblog.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.util.RequestUtils;
+import org.roller.model.RefererManager;
+import org.roller.model.Roller;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.RefererData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.velocity.Macros;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.PageContext;
+
+//////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Provides the macros object that is available to Roller day templates.
+ */
+public class WeblogEntryMacros extends Macros
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RollerRequest.class);
+
+ private Date mDate = null;
+
+ //-----------------------------------------------------------------------
+ /**
+ * Construct macros object for page context and date.
+ * @param ctx JSP page context being processed.
+ * @param date Data formatter for entry's date.
+ */
+ public WeblogEntryMacros( PageContext ctx, Date date )
+ {
+ super( ctx, null );
+ mDate = date;
+ }
+
+ //-----------------------------------------------------------------------
+ public List getDayLinkbacks()
+ {
+ List list = new ArrayList();
+ try
+ {
+ List refs = null;
+
+ Roller roller = getRollerRequest().getRoller();
+ String userName = getRollerRequest().getUser().getUserName();
+ RefererManager refmgr = roller.getRefererManager();
+
+ refs = refmgr.getReferersToDate( getWebsite(), view("yyyyMMdd") );
+
+ for (Iterator rdItr = refs.iterator(); rdItr.hasNext();) {
+ RefererData referer = (RefererData) rdItr.next();
+
+ if ( referer.getTitle()==null ) continue;
+ if ( referer.getTitle().trim().equals("") ) continue;
+ if ( referer.getExcerpt()==null ) continue;
+ if ( referer.getExcerpt().trim().equals("") ) continue;
+
+ if ( referer.getVisible().booleanValue()
+ || getRollerRequest().isUserAuthorizedToEdit() )
+ {
+ list.add( referer );
+ }
+ }
+
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Getting referers",e);
+ }
+ return list;
+ }
+
+ //-----------------------------------------------------------------------
+ /** Show entry date using standard format.
+ * @deprecated Use methods on
+ * {@link org.roller.presentation.weblog.WeblogEntryDataEx WeblogEntryDataEx}
+ * instead.
+ */
+ public String showEntryDate()
+ {
+ return this.toString();
+ }
+
+ //-----------------------------------------------------------------------
+ /** Show entry date using specified
+ * {@link java.text.SimpleDateFormat SimpleDateFormat}
+ * format.
+ * @deprecated Use methods on
+ * {@link org.roller.presentation.weblog.WeblogEntryDataEx WeblogEntryDataEx}
+ * instead.
+ */
+ public String showFormattedEntryDate( String format )
+ {
+ return this.view( format );
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Show entry permalink and an edit-entry link if logged in as editor.
+ * @param entry Weblog entry for which permalink is to be shown.
+ * @deprecated Use methods on
+ * {@link org.roller.presentation.weblog.WeblogEntryDataEx WeblogEntryDataEx}
+ * instead.
+ * @return HTML for displaying entry permalink icon with permalink.
+ */
+ public String showEntryPermalink( WeblogEntryData entry )
+ {
+ HttpServletRequest request = getRollerRequest().getRequest();
+ String userName = getRollerRequest().getUser().getUserName();
+
+ String edit = null;
+ try
+ {
+ if ( getRollerRequest().isUserAuthorizedToEdit() )
+ {
+ Hashtable params = new Hashtable();
+ params.put( RollerRequest.WEBLOGENTRYID_KEY, entry.getId());
+ params.put( RollerRequest.USERNAME_KEY, userName);
+ params.put( RollerRequest.ANCHOR_KEY, entry.getAnchor());
+ edit = RequestUtils.computeURL( mPageContext,
+ "editWeblog", null, null, params,null,false);
+ }
+ }
+ catch (Exception e)
+ {
+ // should never happen, but if it does:
+ mLogger.error("ERROR creating Edit-Entry URL",e);
+ }
+
+ StringBuffer sb = new StringBuffer();
+ sb.append( "<a href=\"");
+ sb.append( request.getContextPath());
+ sb.append( "/page/");
+ sb.append( userName );
+ sb.append( "/");
+ sb.append( showFormattedEntryDate("yyyyMMdd") );
+ sb.append( "#" );
+ sb.append( entry.getAnchor() );
+ sb.append( "\" title=\"Permanent link to this weblog entry\"" );
+ sb.append( " class=\"entrypermalink\">#</a>" );
+ if ( edit != null )
+ {
+ sb.append( " [<a href=\""+edit+"\">Edit</a>]" );
+ }
+
+ return sb.toString();
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Show day permalink and an edit-entry link if logged in as editor.
+ * @return HTML for displaying day permalink icon with permalink.
+ */
+ public String showDayPermalink()
+ {
+ HttpServletRequest request =
+ (HttpServletRequest)mPageContext.getRequest();
+
+ String userName =
+ RollerRequest.getRollerRequest(request).getUser().getUserName();
+
+ StringBuffer sb = new StringBuffer();
+ sb.append( "<a href=\"");
+ sb.append( request.getContextPath());
+ sb.append( "/page/");
+ sb.append( userName );
+ sb.append( "/");
+ sb.append( showFormattedEntryDate("yyyyMMdd") );
+ sb.append( "\"><img class=\"daypermalink\" src=\"" );
+ sb.append( request.getContextPath() );
+ sb.append( "/images/permalink.gif\" ");
+ sb.append( "title=\"Permanent link to this day\" " );
+ sb.append( "alt=\"" + showFormattedEntryDate("yyyyMMdd") + "\"/></a>" );
+
+ return sb.toString();
+ }
+
+ //-----------------------------------------------------------------------
+
+ public String showCommentsLink( WeblogEntryData entry )
+ {
+ if (entry.getWebsite().getAllowComments().booleanValue())
+ {
+ HttpServletRequest request =
+ (HttpServletRequest)mPageContext.getRequest();
+
+ int commentCount = 0;
+ RollerRequest rreq = null;
+ try
+ {
+ rreq = RollerRequest.getRollerRequest(request);
+ WeblogManager mgr = rreq.getRoller().getWeblogManager();
+ List comments = mgr.getComments( entry.getId() );
+ commentCount = comments.size();
+ }
+ catch (Exception e)
+ {
+ // should never happen, but if it does:
+ if (rreq != null)
+ mLogger.error("ERROR in showCommentsLink",e);
+ else
+ System.err.println("ERROR in showCommentsLink:"+e.toString());
+ }
+ StringBuffer link = new StringBuffer( request.getContextPath());
+ link.append( "/comment.do?method=edit&entryid=");
+ link.append( entry.getId() );
+
+ StringBuffer sb = new StringBuffer("<a href=\"");
+ sb.append( link );
+ sb.append("\" onclick=\"window.open('");
+ sb.append( link ).append("','comments','");
+ sb.append("width=480,height=480,scrollbars=yes,status=yes');");
+ sb.append("return false\" class=\"entrycommentslink\">Comments [");
+ sb.append(commentCount).append("]</a>");
+ return sb.toString();
+ }
+ return "";
+ }
+
+ /** Format date using pattern */
+ public String view( String pattern )
+ {
+ SimpleDateFormat format = new SimpleDateFormat( pattern );
+ return format.format( mDate );
+ }
+ /** Format date using standard format. */
+ public String toString()
+ {
+ return view("EEEE MMMM dd, yyyy");
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/tags/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/tags/package.html?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/tags/package.html (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/tags/package.html Wed Jun 8 20:18:46 2005
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title></title>
+</head>
+<body>
+JSP tags for displaying and editing weblog entries.<br>
+</body>
+</html>
Added: incubator/roller/trunk/src/org/roller/presentation/website/ThemeCache.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/ThemeCache.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/website/ThemeCache.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/website/ThemeCache.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,109 @@
+package org.roller.presentation.website;
+
+import org.roller.util.LRUCache2;
+
+/**
+ * Caches the Theme files to avoid repeated reading of the files from the
+ * harddrive.
+ *
+ * @author llavandowska
+ */
+public class ThemeCache
+{
+ private static ThemeCache INSTANCE = new ThemeCache();
+ private static String cacheName = "ThemeFiles";
+ /**
+ * How many objects to store in cache.
+ * @TODO Add configuration for maxObjects in theme cache
+ */
+ private static int maxObjects = 500;
+
+ private static LRUCache2 cache = new LRUCache2(maxObjects, 30 * 60 * 1000);
+
+ /**
+ * How long until an object in cache expires.
+ * @TODO Add configuration for theme cache timeout
+ */
+ private long expireInterval = 1000l*60*60*24; // 1 second * 1 min * 1 hr * 24 hours
+
+ /**
+ * Should the PreviewResourceLoader cache the Template files.
+ * @TODO Add configuration for enabling theme template caching
+ */
+ private static boolean cacheTemplateFiles = false;
+
+ /** Private constructor to prevent outside instantiation **/
+ private ThemeCache() { }
+
+ /**
+ *
+ */
+ public static ThemeCache getInstance()
+ {
+ return INSTANCE;
+ }
+
+ /**
+ *
+ */
+ public String putIntoCache(String themeName, String fileName, String template)
+ {
+ if (cacheTemplateFiles)
+ {
+ cache.put(themeName+":"+fileName, template);
+ }
+ return template;
+
+ }
+
+ /**
+ * Null will be returned if there is a problem or if caching is "turned
+ * off".
+ */
+ public String getFromCache(String themeName, String fileName)
+ {
+ if (!cacheTemplateFiles) return null;
+ return (String) cache.get(themeName + ":" + fileName);
+ }
+
+ /**
+ *
+ */
+ public void removeFromCache(String themeName, String fileName)
+ {
+ if (!cacheTemplateFiles) return;
+ cache.purge( new String[] { themeName+":"+fileName } );
+ }
+
+
+ /**
+ * The list of files in a Theme is cached as a String[], the key being the
+ * Theme location itself.
+ *
+ * @param themeDir
+ * @param fileNames
+ * @return String[]
+ */
+ public String[] setFileList(String themeDir, String[] fileNames)
+ {
+ if (cacheTemplateFiles)
+ {
+ cache.put(themeDir, fileNames);
+ }
+ return fileNames;
+
+ }
+
+ /**
+ * The list of files in a Theme is cached as a String[], the key being the
+ * Theme location itself. If caching is turned off this will return null.
+ *
+ * @param theme
+ * @return String[]
+ */
+ public String[] getFileList(String themeDir)
+ {
+ if (!cacheTemplateFiles) return null;
+ return (String[])cache.get(themeDir);
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2005
+ * Anil R. Gangolli. All rights reserved.
+ *
+ * Distributed with the Roller Weblogger Project under the terms of the Roller Software
+ * License
+ */
+
+package org.roller.presentation.website.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.RollerException;
+import org.roller.model.PingTargetManager;
+import org.roller.pojos.PingTargetData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.forms.PingTargetForm;
+import org.roller.presentation.weblog.actions.BasePingTargetsAction;
+
+import java.util.List;
+
+/**
+ * Administer common ping targets.
+ *
+ * @struts.action name="pingTargetForm" path="/admin/commonPingTargets" scope="request" parameter="method"
+ * @struts.action-forward name="pingTargets.page" path="/website/CommonPingTargets.jsp"
+ * @struts.action-forward name="pingTargetEdit.page" path="/website/CommonPingTargetEdit.jsp"
+ * @struts.action-forward name="pingTargetDeleteOK.page" path="/website/CommonPingTargetDeleteOK.jsp"
+ */
+public class CommonPingTargetsAction extends BasePingTargetsAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(CommonPingTargetsAction.class);
+
+ protected Log getLogger() {
+ return mLogger;
+ }
+
+ /*
+ * Get the ping targets for the view. Here we return the common ping targets for the
+ * entire site.
+ */
+ protected List getPingTargets(RollerRequest rreq) throws RollerException
+ {
+ PingTargetManager pingTargetMgr = rreq.getRoller().getPingTargetManager();
+ return pingTargetMgr.getCommonPingTargets();
+ }
+
+ /*
+ * Create a new ping target (blank). Here we create a common ping target.
+ */
+ protected PingTargetData createPingTarget(RollerRequest rreq, PingTargetForm pingTargetForm)
+ throws RollerException
+ {
+ PingTargetManager pingTargetMgr = rreq.getRoller().getPingTargetManager();
+ return pingTargetMgr.createCommonPingTarget(
+ pingTargetForm.getName(), pingTargetForm.getPingUrl());
+ }
+
+
+ /*
+ * Check if request carries admin rights.
+ */
+ protected boolean hasRequiredRights(RollerRequest rreq) throws RollerException
+ {
+ // This mimics the check in other admin actions, but not sure why the latter is not sufficient.
+ return (rreq.isUserAuthorizedToEdit() && rreq.isAdminUser());
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/website/actions/MaintenanceAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/actions/MaintenanceAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/website/actions/MaintenanceAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/website/actions/MaintenanceAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,129 @@
+/*
+ * Created on May 25, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Generation - Code and Comments
+ */
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.business.search.operations.RebuildUserIndexOperation;
+import org.roller.model.IndexManager;
+import org.roller.pojos.UserData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCacheFilter;
+
+/**
+ * Allows user to perform Website maintenence operations such as flushing
+ * the website page cache or re-indexing the website search index.
+ *
+ * @struts.action path="/editor/maintenance" name="maintenanceForm" scope="request" parameter="method"
+ *
+ * @struts.action-forward name="maintenance.page" path="/website/Maintenance.jsp"
+ */
+public class MaintenanceAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(MaintenanceAction.class);
+
+
+ /* (non-Javadoc)
+ * @see org.apache.struts.actions.DispatchAction#unspecified(
+ * org.apache.struts.action.ActionMapping,
+ * org.apache.struts.action.ActionForm,
+ * javax.servlet.http.HttpServletRequest,
+ * javax.servlet.http.HttpServletResponse)
+ */
+ protected ActionForward unspecified(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException
+ {
+ return mapping.findForward("maintenance.page");
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Respond to user's request to rebuild search index.
+ */
+ public ActionForward index(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ UserData ud = rreq.getUser();
+ IndexManager manager = rreq.getRoller().getIndexManager();
+ manager.rebuildUserIndex();
+
+ ActionMessages messages = new ActionMessages();
+ messages.add(null, new ActionMessage("maintenance.message.indexed"));
+ saveMessages(request, messages);
+ }
+ }
+ catch (RollerException re)
+ {
+ mLogger.error("Unexpected exception",re.getRootCause());
+ throw new ServletException(re);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Unexpected exception",e);
+ throw new ServletException(e);
+ }
+ return mapping.findForward("maintenance.page");
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Respond to request to flush a user's page cache.
+ */
+ public ActionForward flushCache(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ UserData user = rreq.getUser();
+ PageCacheFilter.removeFromCache(request, user);
+
+ ActionMessages messages = new ActionMessages();
+ messages.add(null, new ActionMessage("maintenance.message.flushed"));
+ saveMessages(request, messages);
+ }
+ }
+ catch (Exception e)
+ {
+ throw new ServletException(e);
+ }
+ return mapping.findForward("maintenance.page");
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/website/actions/PageFormAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/actions/PageFormAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/website/actions/PageFormAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/website/actions/PageFormAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,372 @@
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+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.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.RollerPermissionsException;
+import org.roller.model.UserManager;
+import org.roller.pojos.PageData;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.forms.PageForm;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.util.StringUtils;
+import org.roller.util.Utilities;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Page form action.
+ * @struts.action name="pageForm" path="/editor/page"
+ * scope="session" parameter="method"
+ *
+ * @struts.action-forward name="removePage.page" path="/website/remove-page.jsp"
+ * @struts.action-forward name="editPage.page" path="/website/edit-page.jsp"
+ * @struts.action-forward name="editPages.page" path="/website/edit-pages.jsp"
+ */
+public final class PageFormAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(PageFormAction.class);
+
+ public ActionForward add(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("editPages.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ PageForm form = (PageForm)actionForm;
+ PageData data = new PageData();
+ form.copyTo(data, request.getLocale());
+ WebsiteData hd = rreq.getWebsite();
+
+ data.setWebsite( hd );
+ data.setUpdateTime( new java.util.Date() );
+ data.setDescription("");
+ data.setTemplate("");
+ validateLink( data );
+
+ UserManager mgr = rreq.getRoller().getUserManager();
+ mgr.storePage( data );
+ rreq.getRoller().commit();
+
+ ActionMessages uiMessages = new ActionMessages();
+ uiMessages.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("pagesForm.addNewPage.success",
+ data.getName()));
+ saveMessages(request, uiMessages);
+
+ UserData user = rreq.getUser();
+ PageCacheFilter.removeFromCache( request, user );
+
+ actionForm.reset(mapping,request);
+
+ addModelObjects(rreq);
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("editPage.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ UserData ud = rreq.getUser();
+ PageData pd = rreq.getPage();
+ PageForm pf = (PageForm)actionForm;
+ pf.copyFrom(pd, request.getLocale());
+
+ PageCacheFilter.removeFromCache( request,ud );
+
+ addModelObjects(rreq);
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward editPages(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("editPages.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ addModelObjects(rreq);
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward remove(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("editPages");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ PageForm form = (PageForm)actionForm;
+ PageData data = new PageData();
+ form.copyTo(data, request.getLocale());
+
+ UserManager mgr = rreq.getRoller().getUserManager();
+ mgr.removePageSafely( data.getId() );
+ rreq.getRoller().commit();
+
+ UserData user = rreq.getUser();
+ PageCacheFilter.removeFromCache( request,user );
+
+ addModelObjects(rreq);
+
+ actionForm.reset(mapping,request);
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (RollerException e)
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(null, new ActionError(
+ "error.internationalized",e.getRootCauseMessage()));
+ saveErrors(request, errors);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward removeOk(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("removePage.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ PageData cd = rreq.getPage();
+ PageForm pf = (PageForm)actionForm;
+ pf.copyFrom(cd, request.getLocale());
+
+ UserData ud = rreq.getUser();
+ request.setAttribute("user",ud);
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward update(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("editPage.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ PageForm form = (PageForm)actionForm;
+ UserManager mgr = rreq.getRoller().getUserManager();
+ PageData data = mgr.retrievePage(form.getId());
+ data.save(); // should through exception if no save permission
+ form.copyTo(data, request.getLocale());
+ data.setUpdateTime( new java.util.Date() );
+ data.setWebsite( rreq.getWebsite() );
+
+ validateLink( data );
+
+ mgr.storePage( data );
+ rreq.getRoller().commit();
+
+ // set the (possibly) new link back into the Form bean
+ ((PageForm)actionForm).setLink( data.getLink() );
+
+ ActionMessages uiMessages = new ActionMessages();
+ uiMessages.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("pageForm.save.success",
+ data.getName()));
+ saveMessages(request, uiMessages);
+
+ UserData user = rreq.getUser();
+ PageCacheFilter.removeFromCache( request,user );
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+
+ // Don't reset this form. Allow user to keep on tweaking.
+ //actionForm.reset(mapping,request);
+ }
+ catch (RollerPermissionsException e)
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(null, new ActionError("error.permissions.deniedSave"));
+ saveErrors(request, errors);
+ forward = mapping.findForward("access-denied");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Ensures that the page has a safe value for the link
+ * field. "Safe" is defined as containing no html
+ * or any other non-alphanumeric characters.
+ * While this is overly strict (there are non-alphanum
+ * characters that are web-safe), this is a much easier
+ * test-and-correct. Otherwise we would need a RegEx package.
+ */
+ private void validateLink( PageData data )
+ {
+ // if data.getLink() is null or empty
+ // use the title ( data.getName() )
+ if ( StringUtils.isEmpty( data.getLink() ) )
+ {
+ data.setLink( data.getName() );
+ }
+
+ // if link contains any nonAlphanumeric, strip them
+ // first we must remove any html, as this is
+ // non-instructional markup. Then do a straight
+ // removeNonAlphanumeric.
+ if ( !StringUtils.isAlphanumeric( data.getLink() ) )
+ {
+ String link = Utilities.removeHTML( data.getLink() );
+ link = Utilities.removeNonAlphanumeric( link );
+ data.setLink( link );
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward cancel(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ return (mapping.findForward("editPages"));
+ }
+
+ //-----------------------------------------------------------------------
+ private void addModelObjects( RollerRequest rreq )
+ throws RollerException {
+
+ HttpServletRequest request = rreq.getRequest();
+
+ UserManager mgr = rreq.getRoller().getUserManager();
+
+ UserData user = rreq.getUser();
+ request.setAttribute("user",user);
+
+ WebsiteData wd = rreq.getWebsite();
+ request.setAttribute("website", wd);
+
+ List pages = mgr.getPages(wd);
+ request.setAttribute("pages",pages);
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerConfigAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerConfigAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerConfigAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerConfigAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,151 @@
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+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.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.RollerPermissionsException;
+import org.roller.model.IndexManager;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.RollerConfigData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.RollerSession;
+import org.roller.presentation.website.formbeans.RollerConfigFormEx;
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * New user form action.
+ *
+ */
+public final class RollerConfigAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RollerConfigAction.class);
+
+ //-----------------------------------------------------------------------
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("rollerConfig.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() )
+ {
+ RollerConfigData rollerConfig = RollerFactory.getRoller().getConfigManager().getRollerConfig();
+ RollerConfigFormEx rcForm = (RollerConfigFormEx)actionForm;
+ rcForm.copyFrom(rollerConfig, request.getLocale());
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward update(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("rollerConfig.page");
+ ActionErrors errors = new ActionErrors();
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() )
+ {
+ RollerConfigFormEx rcForm = (RollerConfigFormEx)actionForm;
+
+ // get current RollerConfig and set new values
+ RollerConfigData rollerConfig = RollerFactory.getRoller().getConfigManager().getRollerConfig();
+ rcForm.copyTo(rollerConfig, request.getLocale());
+
+ // persist
+ rreq.getRoller().getConfigManager().storeRollerConfig(rollerConfig);
+ rreq.getRoller().getRefererManager().applyRefererFilters();
+ rreq.getRoller().commit();
+
+ ActionMessages uiMessages = new ActionMessages();
+ uiMessages.add(null, new ActionMessage("weblogEdit.changesSaved"));
+ saveMessages(request, uiMessages);
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (RollerPermissionsException e)
+ {
+ errors.add(null, new ActionError("error.permissions.deniedSave"));
+ saveErrors(request, errors);
+ forward = mapping.findForward("access-denied");
+ }
+ catch (RollerException e)
+ {
+ mLogger.error(e);
+ errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+ "error.update.rollerConfig",e.getClass().getName()));
+ saveErrors(request,errors);
+ }
+ return forward;
+ }
+
+ public ActionForward index(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ ActionForward forward = mapping.findForward("rollerConfig.page");
+ try {
+ // if admin requests an index be re-built, do it
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ IndexManager manager = rreq.getRoller().getIndexManager();
+
+ manager.rebuildUserIndex();
+ request.getSession().setAttribute(
+ RollerSession.STATUS_MESSAGE,
+ "Successfully scheduled rebuild of all users' indexes");
+
+ // load up RollerConfig for UI
+ RollerConfigData rollerConfig = RollerFactory.getRoller().getConfigManager().getRollerConfig();
+ RollerConfigFormEx rcForm = (RollerConfigFormEx)actionForm;
+ rcForm.copyFrom(rollerConfig, request.getLocale());
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+}
\ No newline at end of file
Added: incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerPropertiesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerPropertiesAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerPropertiesAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/website/actions/RollerPropertiesAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,178 @@
+/*
+ * RollerPropertiesAction.java
+ *
+ * Created on April 21, 2005, 2:48 PM
+ */
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+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.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.RollerPermissionsException;
+import org.roller.model.PropertiesManager;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.RollerPropertyData;
+import org.roller.presentation.RollerRequest;
+
+
+
+/**
+ * Struts Action class which handles requests to the Admin Properties page.
+ *
+ * @author Allen Gilliland
+ *
+ * @struts.action path="/admin/rollerConfig"
+ * scope="request" parameter="method"
+ *
+ * @struts.action-forward name="rollerProperties.page"
+ * path="/website/rollerProperties.jsp"
+ */
+public class RollerPropertiesAction extends DispatchAction {
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RollerPropertiesAction.class);
+
+
+ public ActionForward unspecified(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException {
+
+ // make "edit" our default action
+ return this.edit(mapping, actionForm, request, response);
+ }
+
+
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException {
+
+ mLogger.debug("Handling edit request");
+
+ ActionForward forward = mapping.findForward("rollerProperties.page");
+ try {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() ) {
+
+ // just grab our properties map and put it in the request
+ Roller mRoller = RollerFactory.getRoller();
+ PropertiesManager propsManager = mRoller.getPropertiesManager();
+ Map props = propsManager.getProperties();
+ request.setAttribute("RollerProps", props);
+
+ } else {
+ forward = mapping.findForward("access-denied");
+ }
+ } catch (Exception e) {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+
+ public ActionForward update(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException {
+
+ mLogger.debug("Handling update request");
+
+ ActionForward forward = mapping.findForward("rollerProperties.page");
+ ActionErrors errors = new ActionErrors();
+ try {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() && rreq.isAdminUser() ) {
+
+ // just grab our properties map and put it in the request
+ Roller mRoller = RollerFactory.getRoller();
+ PropertiesManager propsManager = mRoller.getPropertiesManager();
+ Map props = propsManager.getProperties();
+ request.setAttribute("RollerProps", props);
+
+ // only set values for properties that are already defined
+ String propName = null;
+ RollerPropertyData updProp = null;
+ String incomingProp = null;
+ Iterator propsIT = props.keySet().iterator();
+ while(propsIT.hasNext()) {
+ propName = (String) propsIT.next();
+ updProp = (RollerPropertyData) props.get(propName);
+ incomingProp = request.getParameter(updProp.getName());
+
+ mLogger.debug("Checking property ["+propName+"]");
+
+ // some special treatment for booleans
+ // this is a bit hacky since we are assuming that any prop
+ // with a value of "true" or "false" is meant to be a boolean
+ // it may not always be the case, but we should be okay for now
+ if(updProp.getValue().equals("true") ||
+ updProp.getValue().equals("false")) {
+
+ if(incomingProp == null || !incomingProp.equals("on"))
+ incomingProp = "false";
+ else
+ incomingProp = "true";
+ }
+
+ // only work on props that were submitted with the request
+ if(incomingProp != null) {
+ mLogger.debug("Setting new value for ["+propName+"]");
+
+ // NOTE: the old way had some locale sensitive way to do this??
+ updProp.setValue(incomingProp.trim());
+ }
+ }
+
+ // save it
+ propsManager.store(props);
+ mRoller.getRefererManager().applyRefererFilters();
+ mRoller.commit();
+
+ ActionMessages uiMessages = new ActionMessages();
+ uiMessages.add(null, new ActionMessage("weblogEdit.changesSaved"));
+ saveMessages(request, uiMessages);
+
+ } else {
+ forward = mapping.findForward("access-denied");
+ }
+
+ } catch (RollerPermissionsException e) {
+ errors.add(null, new ActionError("error.permissions.deniedSave"));
+ saveErrors(request, errors);
+ forward = mapping.findForward("access-denied");
+
+ } catch (RollerException e) {
+ mLogger.error(e);
+ errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(
+ "error.update.rollerConfig",e.getClass().getName()));
+ saveErrors(request,errors);
+ }
+
+ return forward;
+ }
+
+}