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 (“) 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/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&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