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/10/21 23:46:28 UTC

svn commit: r327589 [40/72] - in /incubator/roller/branches/roller_1.x: ./ 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...

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,392 @@
+package org.roller.presentation.weblog.formbeans;
+
+import org.apache.commons.lang.StringUtils;
+import org.roller.RollerException;
+import org.roller.pojos.CommentData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.forms.WeblogEntryForm;
+import org.roller.util.DateUtil;
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.roller.pojos.EntryAttributeData;
+import org.roller.pojos.WebsiteData;
+
+/**
+ * Extends the WeblogEntryForm so that additional properties may be added.
+ * @struts.form name="weblogEntryFormEx"
+ * @author dmj
+ */
+public class WeblogEntryFormEx extends WeblogEntryForm
+{
+    private String mCategoryId = null;
+    private Date mDate = new Date();    
+    private String mDateString = null;        
+    private Integer mHours = new Integer(0);
+    private Integer mMinutes = new Integer(0);
+    private Integer mSeconds = new Integer(0);
+    private String[] mReplacementWords = null;
+    private String[] pluginsArray = new String[0];
+    private String[] deleteComments = new String[0];
+    private String[] spamComments = new String[0];
+    private String trackbackUrl = null;
+    private Map attributes = new HashMap();
+    
+    public WeblogEntryFormEx()
+    {
+        super();
+    }
+
+    public WeblogEntryFormEx(WeblogEntryData entryData, java.util.Locale locale) 
+        throws RollerException
+    {
+        copyFrom(entryData, locale);
+    }
+    
+    /**
+     * @param request
+     * @param response
+     */
+    public void initNew(HttpServletRequest request, HttpServletResponse response) 
+    {
+        RollerRequest rreq = RollerRequest.getRollerRequest(request);
+        if (rreq.getWebsite().getDefaultPlugins() != null)
+        {
+            setPluginsArray(StringUtils.split(
+                    rreq.getWebsite().getDefaultPlugins(), ",") );
+        }
+        allowComments = Boolean.TRUE;
+        updateTime = new Timestamp(new Date().getTime());
+        pubTime = updateTime;
+        initPubTimeDateStrings(rreq.getWebsite(), request.getLocale());        
+    }
+    
+    /**
+     * Copy values from this Form to the WeblogEntryData.
+     */
+    public void copyTo(WeblogEntryData entry, Locale locale, Map paramMap) 
+        throws RollerException
+    {
+        super.copyTo(entry, locale);
+        
+        // First parts the date string from the calendar 
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        final Date newDate;
+        try
+        {
+            newDate = df.parse(getDateString());
+        }
+        catch (ParseException e)
+        {
+            throw new RollerException("ERROR parsing date.");
+        }
+        
+        // Now handle the time from the hour, minute and second combos
+        final Calendar cal = Calendar.getInstance(locale);
+        cal.setTime(newDate);
+        cal.setTimeZone(entry.getWebsite().getTimeZoneInstance());
+        cal.set(Calendar.HOUR_OF_DAY, getHours().intValue());
+        cal.set(Calendar.MINUTE, getMinutes().intValue());
+        cal.set(Calendar.SECOND, getSeconds().intValue());
+        entry.setPubTime(new Timestamp(cal.getTimeInMillis()));
+        
+        entry.setPlugins( StringUtils.join(this.pluginsArray,",") );
+        
+        // checkboxes don't send a value for unchecked
+        if (entry.getPublishEntry() == null)
+        {
+            entry.setPublishEntry(Boolean.FALSE);
+        }
+        if (getCategoryId() != null) 
+        {
+            entry.setCategoryId(getCategoryId());
+        }       
+        
+        Iterator params = paramMap.keySet().iterator();
+        while (params.hasNext())
+        {
+            String name = (String)params.next();
+            String[] value = (String[])paramMap.get(name);
+            if (name.startsWith("att_") && value.length > 0)
+            {
+                try
+                {
+                    entry.putEntryAttribute(name, value[0]);
+                }
+                catch (Exception e)
+                {
+                    throw new RollerException("ERROR setting attributes",e);
+                }
+            }
+        }
+    }
+    
+    /**
+     * Copy values from WeblogEntryData to this Form.
+     */
+    public void copyFrom(WeblogEntryData entry, Locale locale) 
+        throws RollerException
+    {
+        super.copyFrom(entry, locale);
+        mCategoryId = entry.getCategory().getId();
+        
+        initPubTimeDateStrings(entry.getWebsite(), locale);
+        
+        if (entry.getPlugins() != null)
+        {
+            pluginsArray = StringUtils.split(entry.getPlugins(), ",");
+        }
+        
+        attributes = new HashMap();
+        Iterator atts = entry.getEntryAttributes().iterator();
+        while (atts.hasNext())
+        {
+            EntryAttributeData att = (EntryAttributeData)atts.next();
+            attributes.put(att.getName(), att.getValue());
+        }
+      
+        populateSpamComments(entry);
+    }
+    
+    public Map getAttributes()
+    {
+        return attributes;
+    }
+    
+    /**
+     * Populate the spamComments array for this entry.
+     * @param entry
+     */
+    private void populateSpamComments(WeblogEntryData entry)
+    {
+        ArrayList spamList = new ArrayList();
+        Iterator it = entry.getComments(false).iterator();
+        while (it.hasNext()) {
+            CommentData comment = (CommentData)it.next();
+            if (comment.getSpam().booleanValue())
+            {
+                spamList.add(comment.getId());
+            }
+        }
+        spamComments = (String[])spamList.toArray(new String[spamList.size()]);
+    }
+
+    /**
+     * Localize the PubTime date string.
+     * @param locale
+     */
+    private void initPubTimeDateStrings(WebsiteData website, Locale locale)
+    {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(getPubTime()); 
+        cal.setTimeZone(website.getTimeZoneInstance());
+        mHours = new Integer(cal.get(Calendar.HOUR_OF_DAY));
+        mMinutes = new Integer(cal.get(Calendar.MINUTE));
+        mSeconds = new Integer(cal.get(Calendar.SECOND));
+        
+        DateFormat df = DateFormat.getDateInstance(
+           DateFormat.SHORT, locale);
+        mDateString = df.format(getPubTime());
+    }
+
+    /**
+     * Returns the category ID.
+     * @return String
+     */
+    public String getCategoryId()
+    {
+        return mCategoryId;
+    }
+    
+    public Date getDate()
+    {
+        return mDate;
+    }
+
+    /**
+     * Date string formatted using SHORT format from user's locale.
+     * @return Returns the dateString.
+     */
+    public String getDateString()
+    {
+        return mDateString;
+    }
+
+    /**
+     * @return Returns the hours.
+     */
+    public Integer getHours()
+    {
+        return mHours;
+    }
+
+    /**
+     * @return Returns the minutes.
+     */
+    public Integer getMinutes()
+    {
+        return mMinutes;
+    }
+    
+    /**
+     * Returns the array of replacement words.
+     * @return String[]
+     */ 
+    public String[] getReplacementWords()
+    {
+        return mReplacementWords;
+    }
+
+    /**
+     * @return Returns the seconds.
+     */
+    public Integer getSeconds()
+    {
+        return mSeconds;
+    }
+    
+    /**
+     * Sets the category id.
+     * @param categoryId  the category id to set
+     */
+    public void setCategoryId(String categoryId)
+    {
+        this.mCategoryId = categoryId;
+    }
+
+    /**
+     * Date string formatted using SHORT format from user's locale.
+     * @param dateString The dateString to set.
+     */
+    public void setDateString(String dateString) throws ParseException
+    {
+        mDateString = dateString;
+    }
+
+    /**
+     * @param hours The hours to set.
+     */
+    public void setHours(Integer hours)
+    {
+        mHours = hours;
+    }
+
+    /**
+     * @param minutes The minutes to set.
+     */
+    public void setMinutes(Integer minutes)
+    {
+        mMinutes = minutes;
+    }
+
+    public void setReplacementWords(String[] words)
+    {
+        this.mReplacementWords = words;
+    }
+
+    /**
+     * @param seconds The seconds to set.
+     */
+    public void setSeconds(Integer seconds)
+    {
+        mSeconds = seconds;
+    }
+
+    public String getDay()
+    {
+        java.util.Date theDay = getPubTime();
+        theDay = theDay!=null ? theDay : new java.util.Date();
+        return DateUtil.format8chars(theDay);
+    }
+
+    /**
+     * @return
+     */
+    public String[] getPluginsArray()
+    {
+        return pluginsArray;
+    }
+
+    /**
+     * @param strings
+     */
+    public void setPluginsArray(String[] strings)
+    {
+        pluginsArray = strings;
+    }
+    
+    public void doReset(
+            org.apache.struts.action.ActionMapping mapping, 
+            javax.servlet.ServletRequest request)
+    {
+        super.doReset(mapping, request);
+        
+        pluginsArray = new String[0];
+        
+        // reset time fields to current time
+        Calendar cal = Calendar.getInstance(request.getLocale());
+        Date now = new Date();
+        cal.setTime(now);        
+        mHours = new Integer(cal.get(Calendar.HOUR_OF_DAY));
+        mMinutes = new Integer(cal.get(Calendar.MINUTE));
+        mSeconds = new Integer(cal.get(Calendar.SECOND));        
+        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, request.getLocale());
+        mDateString = df.format(now);
+    }
+
+    /**
+     * @return Returns the selectedComments.
+     */
+    public String[] getDeleteComments() {
+        return deleteComments;
+    }
+    
+    /**
+     * @param selectedComments The selectedComments to set.
+     */
+    public void setDeleteComments(String[] selectedComments) {
+        this.deleteComments = selectedComments;
+    }
+    
+    /**
+     * @return Returns the commentsToMarkAsSpam.
+     */
+    public String[] getSpamComments() {
+        return spamComments;
+    }
+    
+    /**
+     * @param commentsToMarkAsSpam The commentsToMarkAsSpam to set.
+     */
+    public void setSpamComments(String[] commentsToMarkAsSpam) {
+        this.spamComments = commentsToMarkAsSpam;
+    }
+    
+    /**
+     * @return Returns the trackbackUrl.
+     */
+    public String getTrackbackUrl()
+    {
+        return trackbackUrl;
+    }
+    /**
+     * @param trackbackUrl The trackbackUrl to set.
+     */
+    public void setTrackbackUrl(String trackbackUrl)
+    {
+        this.trackbackUrl = trackbackUrl;
+    }
+}
+

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,152 @@
+/*
+ * Created on Mar 25, 2004
+ */
+package org.roller.presentation.weblog.formbeans;
+
+import org.apache.struts.action.ActionMapping;
+
+import java.text.DateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.servlet.ServletRequest;
+
+/**
+ * Form allows user to set Weblog Entry query and export parameters.
+ * 
+ * @struts.form name="weblogQueryForm"
+ * @author lance.lavandowska
+ */
+public class WeblogQueryForm
+    extends    org.apache.struts.action.ActionForm
+    implements java.io.Serializable
+{    
+    private String mEndDateString;
+    private String mStartDateString;
+    private String mFileBy = "month";
+    private String mExportFormat = "rss";
+    private String mCategoryId = null;
+    private Integer mMaxEntries = new Integer(20);
+    private String mStatus = "ALL";
+    
+    // TODO : Implement option for RSS2 or Atom
+
+    public void reset( ActionMapping mapping, ServletRequest request)
+    {                
+        // reset time fields to current time
+        Calendar cal = Calendar.getInstance(request.getLocale());
+        Date now = new Date();
+        cal.setTime(now);        
+    
+        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, request.getLocale());
+        mEndDateString = df.format( now );
+        
+        cal.set(Calendar.DAY_OF_MONTH, 1);
+        mStartDateString = df.format( cal.getTime() );
+    }
+    
+    /**
+     * @return Returns the mStartDateString.
+     */
+    public String getStartDateString()
+    {
+        return this.mStartDateString;
+    }
+    /**
+     * @param startDateString The mStartDateString to set.
+     */
+    public void setStartDateString(String startDateString)
+    {
+        this.mStartDateString = startDateString;
+    }
+    
+    /**
+     * @return Returns the mDateString.
+     */
+    public String getEndDateString()
+    {
+        return this.mEndDateString;
+    }
+    
+    /**
+     * @param dateString The mDateString to set.
+     */
+    public void setEndDateString(String dateString)
+    {
+        this.mEndDateString = dateString;
+    }
+    
+    /**
+     * @return Returns the mFileBy.
+     */
+    public String getFileBy()
+    {
+        return this.mFileBy;
+    }
+    
+    /**
+     * @param fileBy The mFileBy to set.
+     */
+    public void setFileBy(String fileBy)
+    {
+        this.mFileBy = fileBy;
+    }
+    
+    /**
+     * @return Returns the mExportFormat.
+     */
+    public String getExportFormat()
+    {
+        return this.mExportFormat;
+    }
+    
+    /**
+     * @param exportFormat The mExportFormat to set.
+     */
+    public void setExportFormat(String exportFormat)
+    {
+        this.mExportFormat = exportFormat;
+    }
+    /**
+     * @return Returns the category.
+     */
+    public String getCategoryId()
+    {
+        return mCategoryId;
+    }
+    /**
+     * @param category The category to set.
+     */
+    public void setCategoryId(String category)
+    {
+        mCategoryId = category;
+    }
+    /**
+     * @return Returns the maxEntries.
+     */
+    public Integer getMaxEntries()
+    {
+        return mMaxEntries;
+    }
+    /**
+     * @param maxEntries The maxEntries to set.
+     */
+    public void setMaxEntries(Integer maxEntries)
+    {
+        mMaxEntries = maxEntries;
+    }
+    /**
+     * @return Returns the status.
+     */
+    public String getStatus()
+    {
+        return mStatus;
+    }
+    /**
+     * @param status The status to set.
+     */
+    public void setStatus(String status)
+    {
+        mStatus = status;
+    }
+}

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/package.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/package.html (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/formbeans/package.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+Form beans needed for weblog entries, categories and pings.
+
+</body>
+</html>

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/package.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/package.html (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/package.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+Home of TrackbackServlet.
+
+</body>
+</html>

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ApplyPluginsTag.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,209 @@
+     /*
+ * 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;
+import org.roller.pojos.wrapper.WeblogEntryDataWrapper;
+
+/**
+ * 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(WeblogEntryDataWrapper.wrap(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 (&#8220) are getting double-escaped
+        // but I cannot seem to track it down
+        xformed = Utilities.stringReplace(xformed, "&amp#", "&#");
+        
+        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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/BigWeblogCalendarModel.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/DateMacro.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/DateMacro.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/DateMacro.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/DateMacro.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/EditWeblogCalendarModel.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/RssBadgeTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/RssBadgeTag.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/RssBadgeTag.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/RssBadgeTag.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/ViewWeblogEntriesTag.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,158 @@
+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.WeblogTemplate;
+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 )
+            {
+                org.roller.pojos.Template page = website.getPageByLink(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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCalendarModel.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogCategoryChooserTag.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/WeblogEntryMacros.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,246 @@
+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.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;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.wrapper.RefererDataWrapper;
+import org.roller.pojos.wrapper.WeblogEntryDataWrapper;
+
+//////////////////////////////////////////////////////////////////////////////
+
+/**
+ * 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 = RollerFactory.getRoller();
+            String userName = getRollerRequest().getUser().getUserName();
+            RefererManager refmgr = roller.getRefererManager();
+             
+            refs = refmgr.getReferersToDate( getWebsite().getPojo(), 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( RefererDataWrapper.wrap(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( WeblogEntryDataWrapper 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( WeblogEntryDataWrapper entry )
+    {
+        if (entry.getWebsite().getAllowComments().booleanValue())
+        {
+            HttpServletRequest request =
+                (HttpServletRequest)mPageContext.getRequest();
+
+            int commentCount = 0;
+            RollerRequest rreq = null;
+            try
+            {
+                rreq = RollerRequest.getRollerRequest(request);
+                WeblogManager mgr = RollerFactory.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&amp;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/branches/roller_1.x/src/org/roller/presentation/weblog/tags/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/package.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/package.html (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/weblog/tags/package.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+JSP tags used in weblog editor interface (plus calendar tag implementations).
+
+</body>
+</html>

Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/CommonPingTargetsAction.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/website/actions/MaintenanceAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/MaintenanceAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/MaintenanceAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/MaintenanceAction.java Fri Oct 21 14:27:36 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/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerConfigAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerConfigAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerConfigAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/RollerConfigAction.java Fri Oct 21 14:27:36 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