You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/06/08 18:06:46 UTC

svn commit: r189602 [24/50] - in /incubator/roller/trunk: ./ contrib/ contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/ contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/ contrib/plugins/src/org/roller/presentation/velocity/ contrib/plugins/src/org/roller/presentation/velocity/plugins/ contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/ contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/ contrib/plugins/src/org/roller/presentation/velocity/plugins/email/ contrib/plugins/src/org/roller/presentation/velocity/plugins/jspwiki/ contrib/plugins/src/org/roller/presentation/velocity/plugins/radeox/ contrib/plugins/src/org/roller/presentation/velocity/plugins/readmore/ contrib/plugins/src/org/roller/presentation/velocity/plugins/smileys/ contrib/plugins/src/org/roller/presentation/velocity/plugins/textile/ docs/ docs/images/ docs/installguide/ docs/installguide/old/ docs/userguide/ docs/userguide/images/ docs/userguide/old/ metadata/ metadata/database/ metadata/database/hibernate/ metadata/xdoclet/ personal/ personal/eclipse/ personal/testing/ src/ src/org/ src/org/roller/ src/org/roller/business/ src/org/roller/business/hibernate/ src/org/roller/business/utils/ src/org/roller/model/ src/org/roller/pojos/ src/org/roller/presentation/ src/org/roller/presentation/atom/ src/org/roller/presentation/bookmarks/ src/org/roller/presentation/bookmarks/actions/ src/org/roller/presentation/bookmarks/formbeans/ src/org/roller/presentation/bookmarks/tags/ src/org/roller/presentation/filters/ src/org/roller/presentation/forms/ src/org/roller/presentation/newsfeeds/ src/org/roller/presentation/pagecache/ src/org/roller/presentation/pagecache/rollercache/ src/org/roller/presentation/tags/ src/org/roller/presentation/tags/calendar/ src/org/roller/presentation/tags/menu/ src/org/roller/presentation/velocity/ src/org/roller/presentation/weblog/ src/org/roller/presentation/weblog/actions/ src/org/roller/presentation/weblog/formbeans/ src/org/roller/presentation/weblog/search/ src/org/roller/presentation/weblog/search/operations/ src/org/roller/presentation/weblog/tags/ src/org/roller/presentation/website/ src/org/roller/presentation/website/actions/ src/org/roller/presentation/website/formbeans/ src/org/roller/presentation/website/tags/ src/org/roller/presentation/xmlrpc/ src/org/roller/util/ tests/ tests/org/ tests/org/roller/ tests/org/roller/business/ tests/org/roller/model/ tests/org/roller/persistence/ tests/org/roller/presentation/ tests/org/roller/presentation/atom/ tests/org/roller/presentation/bookmarks/ tests/org/roller/presentation/velocity/ tests/org/roller/presentation/velocity/plugins/ tests/org/roller/presentation/velocity/plugins/smileys/ tests/org/roller/presentation/velocity/plugins/textile/ tests/org/roller/presentation/xmlrpc/ tests/org/roller/util/ tools/ tools/buildtime/ tools/buildtime/mockrunner-0.2.6/ tools/buildtime/mockrunner-0.2.6/lib/ tools/buildtime/tomcat-4.1.24/ tools/buildtime/xdoclet-1.2/ tools/buildtime/xdoclet-1.2/lib/ tools/hibernate-2.1/ tools/hibernate-2.1/lib/ tools/lib/ tools/standard-1.0.3/ tools/standard-1.0.3/lib/ tools/standard-1.0.3/tld/ tools/struts-1.1/ tools/struts-1.1/lib/ web/ web/WEB-INF/ web/WEB-INF/classes/ web/WEB-INF/classes/flavors/ web/WEB-INF/classes/themes/ web/bookmarks/ web/images/ web/images/editor/ web/images/midas/ web/images/preview/ web/images/smileys/ web/tags/ web/templates/ web/theme/ web/theme/images/ web/theme/lavender/ web/theme/scripts/ web/theme/scripts/classes/ web/themes/ web/themes/basic/ web/themes/berkley/ web/themes/berkley/images/ web/themes/cheb/ web/themes/cheb/images/ web/themes/cheb/scripts/ web/themes/clean/ web/themes/currency-i18n/ web/themes/currency-i18n/images/ web/themes/currency/ web/themes/currency/images/ web/themes/grey2/ web/themes/moonshine/ web/themes/pacifica/ web/themes/robot/ web/themes/rolling/ web/themes/rolling/images/ web/themes/sotto/ web/themes/sotto/images/ web/themes/sotto/styles/ web/themes/sunsets/ web/themes/sunsets/images/ web/themes/sunsets/scripts/ web/themes/sunsets/styles/ web/themes/werner/ web/themes/x2/ web/themes/x2/images/ web/themes/x2/scripts/ web/themes/x2/styles/ web/weblog/ web/website/

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryFormAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryFormAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryFormAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryFormAction.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,811 @@
+
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.lang.StringUtils;
+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.model.RollerSpellCheck;
+import org.roller.model.UserManager;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.CommentData;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.MainPageAction;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.RollerSession;
+import org.roller.presentation.pagecache.PageCache;
+import org.roller.presentation.velocity.PageHelper;
+import org.roller.presentation.weblog.formbeans.WeblogEntryFormEx;
+import org.roller.presentation.weblog.search.IndexManager;
+import org.roller.presentation.weblog.search.operations.AddEntryOperation;
+import org.roller.presentation.weblog.search.operations.RemoveEntryOperation;
+import org.roller.presentation.xmlrpc.RollerXmlRpcClient;
+import org.roller.util.Utilities;
+
+import com.swabunga.spell.event.SpellCheckEvent;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Supports Weblog Entry form actions edit, remove, update, etc.
+ *
+ * @struts.action name="weblogEntryFormEx" path="/weblog"
+ *     scope="request" parameter="method"
+ *  
+ * @struts.action-forward name="weblogEdit.page" path="/weblog/WeblogEdit.jsp"
+ * @struts.action-forward name="weblogEntryRemove.page" path="/weblog/WeblogEntryRemove.jsp"
+ */
+public final class WeblogEntryFormAction extends DispatchAction
+{
+    private static Log mLogger =
+        LogFactory.getFactory().getInstance(WeblogEntryFormAction.class);
+    
+    //-----------------------------------------------------------------------
+    /**
+     * Allow user to create a new weblog entry.
+     */
+    public ActionForward create(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("weblogEdit.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogEntryFormEx form = (WeblogEntryFormEx)actionForm; 
+                form.initNew(request, response);
+                
+                request.setAttribute("model",
+                        new WeblogEntryPageModel(request, response, mapping,
+                                (WeblogEntryFormEx)actionForm,
+                                WeblogEntryPageModel.EDIT_MODE));
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            request.getSession().getServletContext().log("ERROR",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Allow user to edit a weblog entry.
+     */
+    public ActionForward edit(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("weblogEdit.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogEntryData entry = rreq.getWeblogEntry();
+                WeblogEntryFormEx form = (WeblogEntryFormEx)actionForm;
+                form.copyFrom(entry, request.getLocale());
+
+                request.setAttribute("model",
+                        new WeblogEntryPageModel(request, response, mapping,
+                                form,
+                                WeblogEntryPageModel.EDIT_MODE));
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            request.getSession().getServletContext().log("ERROR",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward preview(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {   
+        // we need to save any new entries before Previewing
+        WeblogEntryFormEx form = (WeblogEntryFormEx)actionForm;
+        if (form.getId() == null) 
+        {
+            save(mapping, actionForm, request, response);
+        }
+        return display(WeblogEntryPageModel.PREVIEW_MODE, 
+                    mapping, actionForm, request, response);
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward returnToEditMode(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        return display(WeblogEntryPageModel.EDIT_MODE, 
+                    mapping, actionForm, request, response);
+    }
+
+    //-----------------------------------------------------------------------
+    private ActionForward display(
+        WeblogEntryPageModel.PageMode mode,
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("weblogEdit.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                request.setAttribute("model",
+                   new WeblogEntryPageModel(request, response, mapping, 
+                           (WeblogEntryFormEx)actionForm, mode));
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            request.getSession().getServletContext().log("ERROR",e);
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Saves weblog entry and flushes page cache so that new entry will appear 
+     * on users weblog page.
+     */
+    public ActionForward save(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("weblogEdit.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                UserManager userMgr =
+                    rreq.getRoller().getUserManager();
+
+                UserData user = rreq.getUser();
+                WebsiteData site = userMgr.getWebsite( user.getUserName() );
+                WeblogEntryFormEx wf = (WeblogEntryFormEx)actionForm;
+                
+                // I was getting column 'x' cannot be null, so I fixed it here.
+                // A better solution might be to change the table so it allows
+                // nulls for these columns.
+                if (wf.getAllowComments() == null)
+                {
+                	wf.setAllowComments(Boolean.FALSE);
+                }
+                if (wf.getRightToLeft() == null)
+                {
+                    wf.setRightToLeft(Boolean.FALSE);
+                }
+                if (wf.getPinnedToMain() == null)
+                {
+                    wf.setPinnedToMain(Boolean.FALSE);
+                }
+                if (wf.getPublishEntry() == null)
+                {
+                    wf.setPublishEntry(Boolean.FALSE);
+                }
+               
+                WeblogEntryData entry = new WeblogEntryData();              
+                wf.copyTo(entry, request.getLocale());
+                entry.setWebsite( site );
+
+                // Store value object (creates new or updates existing)
+                entry.setUpdateTime(new Timestamp(new Date().getTime()));
+                entry.save();
+                wf.copyFrom(entry, request.getLocale());
+                rreq.getRoller().commit();
+                
+                reindexEntry(entry);
+                
+                // open up a new session, because we will forward to the edit action
+                //rreq.getRoller().begin(); // begin already called by RequestFilter
+                
+                request.setAttribute(RollerRequest.WEBLOGENTRYID_KEY, entry.getId());
+                 
+                // Flush the page cache
+                PageCache.removeFromCache(request, user);
+				// refresh the front page cache
+                MainPageAction.flushMainPageCache();
+
+                // remove session objects that may be left over from spellchecking
+                HttpSession session = request.getSession(true);
+                session.removeAttribute("spellCheckEvents");
+                session.removeAttribute("entryText");
+
+                // sendWeblogsPing wasn't getting set right when unchecked
+                if (request.getParameter("sendWeblogsPing") == null)
+                {
+                	wf.setSendWeblogsPing(Boolean.FALSE);
+                }
+
+                sendWeblogsDotComPing(request, user, wf, entry);
+
+                request.setAttribute("model",
+                        new WeblogEntryPageModel(request, response, mapping,
+                                (WeblogEntryFormEx)actionForm,
+                                WeblogEntryPageModel.EDIT_MODE));
+                
+                ActionMessages uiMessages = new ActionMessages();
+                uiMessages.add(null, new ActionMessage("weblogEdit.changesSaved"));
+                saveMessages(request, uiMessages);
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Ping the weblogs.com server.  Notifies them of blog updates.
+     * Several other sites reference weblogs.com for updates.
+     * 
+     * @param request
+     * @param user
+     * @param wf
+     * @param entry
+     */
+    private void sendWeblogsDotComPing(
+        HttpServletRequest request,
+        UserData user,
+        WeblogEntryFormEx wf,
+        WeblogEntryData entry)
+    {
+        // send a ping to Weblogs.com
+        if (wf.getSendWeblogsPing() != null &&
+            wf.getSendWeblogsPing().booleanValue())
+        {
+            RollerContext rctx = RollerContext.getRollerContext(request);
+            String blogUrl = Utilities.escapeHTML(
+                rctx.getAbsoluteContextUrl(request)
+                + "/page/" + user.getUserName());
+
+            String blogName = entry.getWebsite().getName();
+            String result =
+                RollerXmlRpcClient.sendWeblogsPing(blogUrl, blogName);
+            if (result != null) // condition
+            {
+                request.getSession().setAttribute(
+                    RollerSession.STATUS_MESSAGE,
+                    "Weblogs.com Response: " + result);
+            }
+        }
+    }
+
+
+    //-----------------------------------------------------------------------
+    /**
+     * Responds to request to remove weblog entry. Forwards user to page
+     * that presents the 'are you sure?' question.
+     */
+    public ActionForward removeOk(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("weblogEntryRemove.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogEntryFormEx wf = (WeblogEntryFormEx)actionForm;
+                WeblogEntryData wd = 
+                    rreq.getRoller().getWeblogManager().retrieveWeblogEntry(wf.getId());
+                wf.copyFrom(wd, request.getLocale());
+                if (wd == null || wd.getId() == null)
+                {
+                    throw new NullPointerException(
+                        "Unable to find WeblogEntry for " +
+                        request.getParameter(RollerRequest.WEBLOGENTRYID_KEY));
+                }
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Responds to request from the 'are you sure you want to remove?' page.
+     * Removes the specified weblog entry and flushes the cache.
+     */
+    public ActionForward remove(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogManager mgr = rreq.getRoller().getWeblogManager();
+                WeblogEntryData wd = mgr.retrieveWeblogEntry(request.getParameter("id"));
+                
+                // Flush the page cache
+                UserData user = rreq.getUser();
+                PageCache.removeFromCache(request, user);
+
+				// remove the index for it
+                wd.setPublishEntry(Boolean.FALSE);
+				reindexEntry(wd);
+
+                wd.remove();
+                rreq.getRoller().commit();
+
+                ActionMessages uiMessages = new ActionMessages();
+                uiMessages.add(null, new ActionMessage("weblogEdit.entryRemoved"));
+                saveMessages(request, uiMessages);
+            }
+            else
+            {
+                return mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            throw new ServletException(e);
+        }
+        
+        // need to reset all values to empty (including 'id')
+        actionForm = new WeblogEntryFormEx();
+        request.setAttribute(mapping.getName(), actionForm);
+        return create(mapping, actionForm, request, response);
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward correctSpelling(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                HttpSession session = request.getSession(true);
+                WeblogEntryFormEx wf = (WeblogEntryFormEx)actionForm;
+                // misspelt words have been submitted
+                if (wf.getReplacementWords() != null &&
+                    wf.getReplacementWords().length > 0)
+                {
+                    // replace misspelt words with chosen replacement
+                    String[] replacementWords = wf.getReplacementWords();
+                    StringBuffer entryText = new StringBuffer(wf.getText());
+
+                    ArrayList events =
+                        (ArrayList) session.getAttribute("spellCheckEvents");
+                    SpellCheckEvent event = null;
+                    String oldWord = null;
+                    String newWord = null;
+                    int start = -1;
+                    int end = -1;
+                    int count = replacementWords.length;
+                    for(ListIterator it=events.listIterator(events.size());
+                        it.hasPrevious();)
+                    {
+                        event = (SpellCheckEvent)it.previous();
+                        oldWord = event.getInvalidWord();
+                        newWord = replacementWords[ --count ];
+                        if (!oldWord.equals(newWord))
+                        {
+                            start = event.getWordContextPosition();
+                            end = start + oldWord.length();
+                            entryText.replace( start, end, newWord );
+                        }
+                    }
+                    wf.setText( entryText.toString() );
+
+                    return save(mapping, wf, request, response);
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            throw new ServletException(e);
+        }
+        return mapping.findForward("access-denied");
+    }    
+    
+    //-----------------------------------------------------------------------
+    public ActionForward spellCheck(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("weblogEdit.page");
+        try
+        {
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                HttpSession session = request.getSession(true);
+                WeblogEntryFormEx wf = (WeblogEntryFormEx)actionForm;
+                
+                // we need to save any new entries before SpellChecking
+                if (wf.getId() == null) 
+                {
+                    save(mapping, actionForm, request, response);
+                }
+
+                // pass the submitted entry text through the spellchecker
+                ArrayList words =
+                    RollerSpellCheck.getSpellingErrors( wf.getText() );
+                session.setAttribute("spellCheckEvents", words);
+
+                request.setAttribute("model", 
+                    new WeblogEntryPageModel(
+                       request, response, mapping, 
+                       (WeblogEntryFormEx)actionForm,
+                       WeblogEntryPageModel.SPELL_MODE, words));
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            throw new ServletException(e);
+        }
+        return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Update selected comments: delete and/or mark as spam.
+     */
+    public ActionForward updateComments(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        ActionForward forward = mapping.findForward("weblogEdit.page");
+        ActionErrors errors = new ActionErrors();
+        RollerRequest rreq = RollerRequest.getRollerRequest(request);
+        try
+        {
+            if ( rreq.isUserAuthorizedToEdit() )
+            {
+                WeblogEntryData wd = rreq.getWeblogEntry();
+                if (wd == null || wd.getId() == null)
+                {
+                  throw new NullPointerException("Unable to find WeblogEntry for "+
+                        request.getParameter(RollerRequest.WEBLOGENTRYID_KEY));
+                }
+                WeblogEntryFormEx form = (WeblogEntryFormEx)actionForm;
+
+                // If form indicates that comments should be deleted, then delete
+                WeblogManager mgr = rreq.getRoller().getWeblogManager();
+                String[] deleteIds = form.getDeleteComments();
+                if (deleteIds != null && deleteIds.length > 0)
+                {
+                    mgr.removeComments( deleteIds );
+                }
+
+                List comments = mgr.getComments( wd.getId(), false ); // spam too
+                if (form.getSpamComments() != null)
+                {
+                    // comments marked as spam
+                    List spamIds = Arrays.asList(form.getSpamComments());
+
+                    // iterate over all comments, check each to see if
+                    // is in the spamIds list.  If so, mark it as spam.
+                    Iterator it = comments.iterator();
+                    while (it.hasNext())
+                    {
+                        CommentData comment = (CommentData)it.next();
+                        if (spamIds.contains(comment.getId()))
+                        {
+                            comment.setSpam(Boolean.TRUE);                            
+                        }
+                        else 
+                        {
+                            comment.setSpam(Boolean.FALSE);
+                        }
+                        comment.save();
+                    }
+                }
+
+                rreq.getRoller().commit();
+                
+                reindexEntry(wd);
+                
+                request.setAttribute("model",
+                        new WeblogEntryPageModel(request, response, mapping, 
+                                (WeblogEntryFormEx)actionForm,
+                                WeblogEntryPageModel.EDIT_MODE));
+            }
+            else
+            {
+                forward = mapping.findForward("access-denied");
+            }
+        }
+        catch (Exception e)
+        {
+            forward = mapping.findForward("error");
+
+            errors.add(ActionErrors.GLOBAL_ERROR,
+                new ActionError("error.edit.comment", e.toString()));
+            saveErrors(request,errors);
+
+            mLogger.error(getResources(request).getMessage("error.edit.comment")
+                + e.toString(),e);
+        }
+        return forward;
+    }
+
+    /**
+    *
+    */
+   public ActionForward sendTrackback(
+                   ActionMapping mapping, 
+                   ActionForm actionForm,
+                   HttpServletRequest request, 
+                   HttpServletResponse response) throws RollerException
+   {
+       ActionForward forward = mapping.findForward("weblogEdit.page");
+       ActionErrors errors = new ActionErrors();
+       WeblogEntryData entry = null;
+       try
+       {
+           RollerRequest rreq = RollerRequest.getRollerRequest(request);
+           if (rreq.isUserAuthorizedToEdit())
+           {
+               WeblogEntryFormEx form = (WeblogEntryFormEx)actionForm;
+               String entryid = form.getId();
+               if ( entryid == null )
+               {
+                   entryid= request.getParameter(RollerRequest.WEBLOGENTRYID_KEY);
+               }
+
+               RollerContext rctx= RollerContext.getRollerContext(request);
+               WeblogManager wmgr= rreq.getRoller().getWeblogManager();
+               entry = wmgr.retrieveWeblogEntry(entryid);
+
+               String title = entry.getTitle();
+
+               // Run entry through registered PagePlugins
+               PageHelper pageHelper = PageHelper.createPageHelper(request, response);
+               pageHelper.setSkipFlag(true); // don't process ReadMorePlugin
+               String excerpt = pageHelper.renderPlugins(entry);
+               excerpt = StringUtils.left( Utilities.removeHTML(excerpt),255 );
+
+               String url = rctx.createEntryPermalink(entry, request, true);
+               String blog_name = entry.getWebsite().getName();
+
+               if (form.getTrackbackUrl() != null)
+               {
+                   try
+                   {
+                       // Construct data
+
+                       String data = URLEncoder.encode("title", "UTF-8")
+                           +"="+URLEncoder.encode(title, "UTF-8");
+
+                       data += ("&" + URLEncoder.encode("excerpt", "UTF-8")
+                                 +"="+URLEncoder.encode(excerpt,"UTF-8"));
+
+                       data += ("&" + URLEncoder.encode("url", "UTF-8")
+                                 +"="+URLEncoder.encode(url,"UTF-8"));
+
+                       data += ("&" + URLEncoder.encode("blog_name", "UTF-8")
+                                 +"="+URLEncoder.encode(blog_name,"UTF-8"));
+
+                       // Send data
+                       URL tburl = new URL(form.getTrackbackUrl());
+                       URLConnection conn = tburl.openConnection();
+                       conn.setDoOutput(true);
+
+                       OutputStreamWriter wr =
+                           new OutputStreamWriter(conn.getOutputStream());
+                       wr.write(data);
+                       wr.flush();
+
+                       // Get the response
+                       BufferedReader rd = new BufferedReader(
+                               new InputStreamReader(conn.getInputStream()));
+
+                       String line;
+                       StringBuffer resultBuff = new StringBuffer();
+                       while ((line = rd.readLine()) != null)
+                       {
+                           resultBuff.append(Utilities.escapeHTML(line, true));
+                           resultBuff.append("<br />");
+                       }
+                       
+                       ActionMessages resultMsg = new ActionMessages();
+                       resultMsg.add(ActionMessages.GLOBAL_MESSAGE,
+                           new ActionMessage("weblogEdit.trackbackResults", 
+                           resultBuff));
+                       saveMessages(request, resultMsg);
+
+                       wr.close();
+                       rd.close();
+                   }
+                   catch (IOException e)
+                   {
+                       errors.add(ActionErrors.GLOBAL_ERROR,
+                           new ActionError("error.trackback",e));
+                   }
+               }
+               else
+               {
+                   errors.add(ActionErrors.GLOBAL_ERROR,
+                           new ActionError("error.noTrackbackUrlSpecified"));
+               }
+               
+               form.setTrackbackUrl(null);
+           }
+           else
+           {
+               forward = mapping.findForward("access-denied");
+           }
+       }
+       catch (Exception e) // unexpected
+       {
+           mLogger.error(e);
+           String msg = e.getMessage();
+           if ( msg == null )
+           {
+               msg = e.getClass().getName();
+           }
+           errors.add(ActionErrors.GLOBAL_ERROR,
+               new ActionError("error.general",msg));
+       }
+
+       if ( !errors.isEmpty() )
+       {
+           saveErrors(request, errors);
+       }
+       
+       request.setAttribute("model",
+                       new WeblogEntryPageModel(request, response, mapping, 
+                               (WeblogEntryFormEx)actionForm,
+                               WeblogEntryPageModel.EDIT_MODE));
+
+       return forward;
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward cancel(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException
+    {
+        return (mapping.findForward("weblogEdit"));
+    }
+
+    //-----------------------------------------------------------------------
+    public ActionForward unspecified(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws Exception
+    {
+        return create(mapping, actionForm, request, response);
+    }
+    
+    /**
+     * Attempts to remove the Entry from the Lucene index and
+     * then re-index the Entry if it is Published.  If the Entry
+     * is being deleted then mark it published = false.
+     * @param entry
+     */
+    private void reindexEntry(WeblogEntryData entry)
+    {
+        IndexManager manager =
+            RollerContext.getRollerContext(
+                RollerContext.getServletContext()).getIndexManager();
+        
+        // remove entry before (re)adding it, or in case it isn't Published
+        RemoveEntryOperation removeOp = new RemoveEntryOperation(entry);
+        manager.executeIndexOperationNow(removeOp); 
+        
+        // if published, index the entry
+        if (entry.getPublishEntry() == Boolean.TRUE) 
+        {
+            AddEntryOperation addEntry = new AddEntryOperation(entry);
+            manager.scheduleIndexOperation(addEntry);
+        }
+    }
+}
+

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryPageModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryPageModel.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryPageModel.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogEntryPageModel.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,318 @@
+/*
+ * Created on Mar 10, 2004
+ */
+package org.roller.presentation.weblog.actions;
+
+import com.swabunga.spell.event.SpellCheckEvent;
+
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.BasePageModel;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.tags.calendar.CalendarModel;
+import org.roller.presentation.velocity.ContextLoader;
+import org.roller.presentation.weblog.formbeans.WeblogEntryFormEx;
+import org.roller.presentation.weblog.tags.EditWeblogCalendarModel;
+import org.roller.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * All data needed to render the edit-weblog page.
+ * @author David M Johnson
+ */
+public class WeblogEntryPageModel extends BasePageModel
+{
+    private RollerRequest rollerRequest = null;
+    private PageMode mode = null;
+    private ArrayList words = null;
+    private WeblogEntryFormEx form;
+    private List comments = null;
+    
+    public static class PageMode {
+        private String name;
+        public PageMode(String name) {
+            this.name = name;
+        }
+        public boolean equals(Object obj) {
+            return ((PageMode)obj).name.equals(name);
+        }
+    }
+    
+    public static final PageMode EDIT_MODE = new PageMode("EDIT_MODE");
+    public static final PageMode SPELL_MODE = new PageMode("SPELL_MODE");
+    public static final PageMode PREVIEW_MODE = new PageMode("PREVIEW_MODE");
+    
+
+    public WeblogEntryPageModel(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            ActionMapping mapping,
+            WeblogEntryFormEx form,
+            PageMode mode,
+            ArrayList words) throws RollerException
+    {
+        this(request, response, mapping, form, mode);
+        this.words = words;
+    }
+
+    public WeblogEntryPageModel(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            ActionMapping mapping,
+            WeblogEntryFormEx form,
+            PageMode mode) throws RollerException
+    {
+        super(request, response, mapping);
+        this.rollerRequest = RollerRequest.getRollerRequest(request);  
+        this.form = form;
+        this.mode = mode;
+        
+        getRequest().setAttribute("leftPage","/weblog/WeblogEditSidebar.jsp");
+        
+        if (null != form.getId()) 
+        {
+            WeblogManager wmgr = rollerRequest.getRoller().getWeblogManager();
+            comments = wmgr.getComments(form.getId(), false);
+        }
+    }
+
+    public String getBaseURL()
+    {
+		return getRequest().getContextPath();
+	}
+
+    /**
+     * Get recent weblog entries using request parameters to determine
+     * username, date, and category name parameters.
+     * @return List of WeblogEntryData objects.
+     * @throws RollerException
+     */
+    public List getRecentPublishedEntries() throws RollerException
+    {
+        return rollerRequest.getRoller().getWeblogManager()
+            .getWeblogEntries(
+                rollerRequest.getWebsite(), // userName
+                null,              // startDate
+                new Date(),        // endDate
+                null,              // catName
+                WeblogManager.PUB_ONLY,  // status
+                new Integer(20));  // maxEntries
+    }
+
+    /**
+     * Get recent weblog entries using request parameters to determine
+     * username, date, and category name parameters.
+     * @return List of WeblogEntryData objects.
+     * @throws RollerException
+     */
+    public List getRecentDraftEntries() throws RollerException
+    {
+        return rollerRequest.getRoller().getWeblogManager()
+            .getWeblogEntries(
+                rollerRequest.getWebsite(), 
+                null,              // startDate
+                new Date(),        // endDate
+                null,              // catName
+                WeblogManager.DRAFT_ONLY,  // status
+                new Integer(20));  // maxEntries
+    }
+
+    public List getHoursList()
+    {
+        List ret = new LinkedList();
+        for (int i=0; i<24; i++)
+        {
+            ret.add(new Integer(i));
+        }
+        return ret;
+    }
+
+    public List getMinutesList()
+    {
+        List ret = new LinkedList();
+        for (int i=0; i<60; i++)
+        {
+            ret.add(new Integer(i));
+        }
+        return ret;
+    }
+
+    public List getSecondsList()
+    {
+        return getMinutesList();
+    }
+
+    public boolean getHasPagePlugins()
+    {
+        return ContextLoader.hasPlugins();
+    }
+
+    public String getEditorPage()
+    {
+        // Select editor page selected by user (simple text editor,
+        // DHTML editor, Ekit Java applet, etc.
+        String editorPage = rollerRequest.getWebsite().getEditorPage();
+        if (StringUtils.isEmpty( editorPage ))
+        {
+            editorPage = "editor-text.jsp";
+        }
+        return editorPage;
+    }
+
+    public CalendarModel getCalendarModel() throws Exception
+    {
+        // Determine URL to self
+        ActionForward selfForward = getMapping().findForward("editWeblog");
+        String selfUrl= getRequest().getContextPath()+selfForward.getPath();
+
+        // Setup weblog calendar model
+        CalendarModel model = new EditWeblogCalendarModel(
+                rollerRequest, getResponse(), selfUrl );
+        return model;
+    }
+
+    public UserData getUser()
+    {
+        return rollerRequest.getUser();
+    }
+
+    public List getCategories() throws Exception
+    {
+        return rollerRequest.getRoller().getWeblogManager()
+            .getWeblogCategories(rollerRequest.getWebsite(), false);
+    }
+
+    public List getComments() throws Exception
+    {
+        return comments;
+    }
+    
+    private WeblogEntryData weblogEntry;
+    
+    public WeblogEntryData getWeblogEntry() throws RollerException
+    {
+        if (weblogEntry == null) 
+        {
+            weblogEntry = new WeblogEntryData();
+            form.copyTo(weblogEntry, getRequest().getLocale());
+            weblogEntry.setWebsite(rollerRequest.getWebsite());
+        }
+        return weblogEntry;
+    }
+    
+    public String getPermaLink() throws RollerException
+    {
+        String context = RollerContext
+            .getRollerContext(rollerRequest.getRequest())
+            .getAbsoluteContextUrl(rollerRequest.getRequest());
+        return context + getWeblogEntry().getPermaLink();
+    }
+    
+    public String getSpellCheckHtml() throws RollerException
+    {
+        String text = getWeblogEntry().getText();
+        String escapeText = StringUtils.replace( text, "<", "{" );
+        escapeText = StringUtils.replace( escapeText, ">", "}" );
+        StringBuffer newText = new StringBuffer(escapeText);
+        ArrayList events = (ArrayList)
+            getRequest().getSession().getAttribute("spellCheckEvents");
+        SpellCheckEvent event = null;
+        String word = null;
+        int start = -1;
+        int end = -1;
+        String select = null;
+        for(ListIterator it=events.listIterator(events.size()); it.hasPrevious();)
+        {
+            event = (SpellCheckEvent)it.previous();
+            word = event.getInvalidWord();
+            start = event.getWordContextPosition();
+            end = start + word.length();
+            select = makeSelect(word, event.getSuggestions());
+    
+            newText.replace( start, end, select );
+        }
+        escapeText = StringUtils.replace( newText.toString(), "}", "&gt;" );
+        escapeText = StringUtils.replace( escapeText, "{", "&lt;" );
+        return escapeText;
+    }
+    
+    public static String makeSelect(String word, List words)
+    {
+        StringBuffer buf = new StringBuffer("<select name=\"");
+        buf.append("replacementWords\" style=\"font-size: 10px;\">");
+        buf.append("<option selected=\"selected\" value=\"").append(word);
+        buf.append("\">").append(word).append("</option>");
+        if (words == null || words.size() < 1)
+        {
+            buf.append("<option value=\"").append(word);
+            buf.append("\">No Suggestions</option>");
+        }
+        else
+        {
+            for (Iterator it2=words.iterator(); it2.hasNext();)
+            {
+                word = it2.next().toString();
+                buf.append("<option value=\"").append(word);
+                buf.append("\">").append(word).append("</option>");
+            }
+        }    
+        buf.append("</select>");
+        return buf.toString();
+    }
+
+    /**
+     * @return Returns the mode.
+     */
+    public PageMode getMode() {
+        return mode;
+    }
+    
+    /**
+     * @param mode The mode to set.
+     */
+    public void setMode(PageMode mode) {
+        this.mode = mode;
+    }
+    
+    public boolean getEditMode()
+    {
+        return mode.equals(EDIT_MODE);
+    }
+    
+    public boolean getSpellMode()
+    {
+        return mode.equals(SPELL_MODE);
+    }
+    
+    public boolean getPreviewMode()
+    {
+        return mode.equals(PREVIEW_MODE);
+    }
+    
+    /**
+     * @return Returns the words.
+     */
+    public ArrayList getWords() {
+        return words;
+    }
+    /**
+     * @param words The words to set.
+     */
+    public void setWords(ArrayList words) {
+        this.words = words;
+    }
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryAction.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,62 @@
+
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.actions.DispatchAction;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.WeblogQueryForm;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Query weblog entries and display the results in tabular form.
+ *
+ * @struts.action path="/weblogQuery" name="weblogQueryForm" 
+ *     scope="session" parameter="method"
+ * 
+ * @struts.action-forward name="weblogQuery.page" path="/weblog/WeblogQuery.jsp"
+ */
+public final class WeblogQueryAction extends DispatchAction
+{
+    //-----------------------------------------------------------------------
+    /**
+     * Respond to request to add a new or edit an existing weblog entry.
+     * Loads the appropriate model objects and forwards the request to
+     * the edit weblog page.
+     */
+    public ActionForward query(
+        ActionMapping       mapping,
+        ActionForm          actionForm,
+        HttpServletRequest  request,
+        HttpServletResponse response)
+        throws IOException, ServletException, RollerException
+    {
+        WeblogQueryForm form = (WeblogQueryForm)actionForm;
+        RollerRequest rreq = RollerRequest.getRollerRequest(request);
+        WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+        
+        request.setAttribute("model", new WeblogQueryPageModel(
+           request, 
+           response, 
+           mapping,
+           rreq.getWebsite(),
+           form.getCategoryId(),
+           form.getStartDateString(),
+           form.getEndDateString(),
+           form.getStatus(),
+           form.getMaxEntries())); 
+        
+        return mapping.findForward("weblogQuery.page");
+    }
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryPageModel.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryPageModel.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryPageModel.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/WeblogQueryPageModel.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,185 @@
+/*
+ * Created on Mar 10, 2004
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.ActionMapping;
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.BasePageModel;
+import org.roller.presentation.RollerRequest;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * All data needed to render the edit-weblog page.
+ * @author David M Johnson
+ */
+public class WeblogQueryPageModel extends BasePageModel
+{
+    private RollerRequest rollerRequest = null;
+    private WebsiteData website = null;
+    private String category = null;
+    private Date startDate = null;
+    private Date endDate = null;
+    private String status = WeblogManager.PUB_ONLY;
+    private Integer maxEntries = null;
+
+    public WeblogQueryPageModel(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            ActionMapping mapping,
+            WebsiteData website, 
+            String categoryId, 
+            String start, 
+            String end,
+            String status,
+            Integer maxEntries) throws RollerException
+    {
+        super(request, response, mapping);
+        rollerRequest = RollerRequest.getRollerRequest(request);
+        
+        this.website = website;
+        
+        if (null != categoryId && !categoryId.equals("")) 
+        {
+            WeblogManager wmgr = rollerRequest.getRoller().getWeblogManager();
+            WeblogCategoryData cd = wmgr.retrieveWeblogCategory(categoryId);
+            category = cd.getPath();          
+        }
+        
+        final DateFormat df = 
+            DateFormat.getDateInstance(DateFormat.SHORT, request.getLocale());
+        if (null != start && start.trim().length() > 0) 
+        {
+            try
+            {
+                startDate = df.parse(start);
+            }
+            catch (ParseException e)
+            {
+                throw new RollerException("ERROR parsing start date.");
+            }
+        }
+
+        if (null != end && end.trim().length() > 0) 
+        {
+            try
+            {
+                endDate = df.parse(end);
+            }
+            catch (ParseException e)
+            {
+                throw new RollerException("ERROR parsing end date.");
+            }
+        }
+        
+        this.status = status;
+        this.maxEntries = maxEntries;
+    }
+
+    public String getBaseURL()
+    {
+		return getRequest().getContextPath();
+	}
+
+    /**
+     * Get recent weblog entries using request parameters to determine
+     * username, date, and category name parameters.
+     * @return List of WeblogEntryData objects.
+     * @throws RollerException
+     */
+    public List getRecentWeblogEntries() throws RollerException
+    {
+        return rollerRequest.getRoller().getWeblogManager().getWeblogEntries(
+                    website,
+                    startDate,
+                    endDate,
+                    category,
+                    status,
+                    maxEntries);   
+    }
+
+    public List getCategories() throws Exception
+    {
+        List categories = rollerRequest.getRoller().getWeblogManager()
+            .getWeblogCategories(rollerRequest.getWebsite());
+        return categories;
+    }
+
+//    public List getHoursList()
+//    {
+//        List ret = new LinkedList();
+//        for (int i=0; i<24; i++)
+//        {
+//            ret.add(new Integer(i));
+//        }
+//        return ret;
+//    }
+//
+//    public List getMinutesList()
+//    {
+//        List ret = new LinkedList();
+//        for (int i=0; i<60; i++)
+//        {
+//            ret.add(new Integer(i));
+//        }
+//        return ret;
+//    }
+//
+//    public List getSecondsList()
+//    {
+//        return getMinutesList();
+//    }
+//
+//    public boolean getHasPagePlugins()
+//    {
+//        return ContextLoader.hasPlugins();
+//    }
+//
+//    public String getEditorPage()
+//    {
+//        // Select editor page selected by user (simple text editor,
+//        // DHTML editor, Ekit Java applet, etc.
+//        String editorPage = rollerRequest.getWebsite().getEditorPage();
+//        if (StringUtils.isEmpty( editorPage ))
+//        {
+//            editorPage = "editor-text.jsp";
+//        }
+//        return editorPage;
+//    }
+//
+//    public CalendarModel getCalendarModel() throws Exception
+//    {
+//        // Determine URL to self
+//        ActionForward selfForward = getMapping().findForward("editWeblog");
+//        String selfUrl= getRequest().getContextPath()+selfForward.getPath();
+//
+//        // Setup weblog calendar model
+//        CalendarModel model = new EditWeblogCalendarModel(
+//                rollerRequest.getRequest(), getResponse(), selfUrl );
+//        model.setDay( rollerRequest.getDate(true) );
+//        return model;
+//    }
+//
+//    public UserData getUser()
+//    {
+//        return rollerRequest.getUser();
+//    }
+//
+//    public int getCommentCount(WeblogEntryData entry) throws Exception
+//    {
+//		// include Spam in comments count
+//		List comments = rollerRequest.getRoller().getWeblogManager().getComments(entry.getId(), false);
+//		if (comments == null) return 0;
+//		return comments.size();
+//	}
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/package.html?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/package.html (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/package.html Wed Jun  8 09:06:16 2005
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+Actions for weblog forms.<br>
+</body>
+</html>

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/BakeWeblogForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/BakeWeblogForm.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/BakeWeblogForm.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/BakeWeblogForm.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,17 @@
+package org.roller.presentation.weblog.formbeans;
+
+import org.apache.struts.action.ActionForm;
+
+/**
+ * Holds the name of the theme chosen or
+ * the template being edited.
+ * 
+ * @struts.form name="bakeWeblogForm"
+ * 
+ * @author llavandowska
+ */
+public class BakeWeblogForm extends ActionForm
+{
+
+
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoriesForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoriesForm.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoriesForm.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoriesForm.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,63 @@
+
+package org.roller.presentation.weblog.formbeans;
+
+import org.roller.RollerException;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.presentation.forms.WeblogCategoryForm;
+
+
+/**
+ * @struts.form name="categoriesForm"
+ */ 
+public class CategoriesForm extends WeblogCategoryForm
+{
+    private String mParentId = null;
+	private boolean mMoveContents = false; 
+	private String mMoveToCategoryId = null; 
+    private String[] mSelectedCategories = null;
+
+	public CategoriesForm()
+	{
+		super();
+	}
+
+	public CategoriesForm( WeblogCategoryData catData, java.util.Locale locale ) throws RollerException
+	{
+		super(catData, locale);
+	}
+
+    public String getParentId()
+    {
+        return mParentId;
+    }
+
+    public void setParentId(String parentId)
+    {
+        mParentId = parentId;
+    }
+
+    //-------------------------------------------------- Property moveContents
+
+	/** If true then contents should be moved when this Category is removed */
+	public boolean getMoveContents() { return mMoveContents; }
+
+	/** If true then contents should be moved when this Category is removed */
+	public void setMoveContents( boolean flag ) { mMoveContents = flag;}
+
+    //----------------------------------------------- Property moveToCategoryId
+
+	/** Category where contents should be moved if this Category is removed */ 
+	public String getMoveToCategoryId() { return mMoveToCategoryId; }
+
+	/** Category where contents should be moved if this Category is removed */ 
+	public void setMoveToCategoryId( String id ) { mMoveToCategoryId = id;}
+
+    //--------------------------------------------- Property selectedCategories 
+
+    /** Get selected Categories */
+    public String[] getSelectedCategories() { return mSelectedCategories; }
+
+    /** Set selected Categories */
+    public void setSelectedCategories( String[] f ) {mSelectedCategories = f;}
+}
+

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoryDeleteForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoryDeleteForm.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoryDeleteForm.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CategoryDeleteForm.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,134 @@
+/*
+ * Created on Jan 19, 2004
+ */
+package org.roller.presentation.weblog.formbeans;
+
+import org.apache.struts.action.ActionForm;
+
+import java.util.List;
+
+/**
+ * @struts.form name="categoryDeleteForm"
+ */
+public class CategoryDeleteForm extends ActionForm
+{
+    private String name;
+    private String catid = null;
+    private String moveToWeblogCategoryId = null;
+    private List cats = null;
+    private Boolean inUse = Boolean.FALSE;
+    private Boolean confirmDelete = null;
+    
+    /**
+     * @return
+     */
+    public List getCats()
+    {
+        return cats;
+    }
+
+    /**
+     * @return
+     */
+    public String getCatid()
+    {
+        return catid;
+    }
+
+    /**
+     * @return
+     */
+    public Boolean isInUse()
+    {
+        return inUse;
+    }
+
+    /**
+     * @return
+     */
+    public String getMoveToWeblogCategoryId()
+    {
+        return moveToWeblogCategoryId;
+    }
+
+    /**
+     * @param list
+     */
+    public void setCats(List list)
+    {
+        cats = list;
+    }
+
+    /**
+     * @param string
+     */
+    public void setCatid(String string)
+    {
+        catid = string;
+    }
+
+    /**
+     * @param b
+     */
+    public void setInUse(Boolean b)
+    {
+        inUse = b;
+    }
+
+    /**
+     * @param string
+     */
+    public void setMoveToWeblogCategoryId(String string)
+    {
+        moveToWeblogCategoryId = string;
+    }
+
+    /**
+     * @return
+     */
+    public Boolean isDelete()
+    {
+        return confirmDelete;
+    }
+
+    /**
+     * @param b
+     */
+    public void setConfirmDelete(Boolean b)
+    {
+        confirmDelete = b;
+    }
+
+    /**
+     * @return
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * @param string
+     */
+    public void setName(String string)
+    {
+        name = string;
+    }
+
+    /**
+     * @return Returns the delete.
+     */
+    public Boolean getConfirmDelete()
+    {
+        return confirmDelete;
+    }
+
+    /**
+     * @return Returns the inUse.
+     */
+    public Boolean getInUse()
+    {
+        return inUse;
+    }
+
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CommentFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CommentFormEx.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CommentFormEx.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/CommentFormEx.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,94 @@
+package org.roller.presentation.weblog.formbeans;
+
+import org.apache.struts.action.ActionMapping;
+import org.roller.RollerException;
+import org.roller.pojos.CommentData;
+import org.roller.presentation.forms.CommentForm;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Extends the WeblogEntryForm so that additional properties may be added.
+ * These properties are not persistent and are only needed for the UI.
+ *
+ * @struts.form name="commentFormEx"
+ * @author Lance Lavandowska
+ */
+public class CommentFormEx extends CommentForm
+{
+    private String[] deleteComments = null;
+    private String[] spamComments = null;
+    private String mEntryId = null;
+
+    public CommentFormEx()
+    {
+        super();
+    }
+
+    public CommentFormEx(CommentData entryData, java.util.Locale locale ) throws RollerException
+    {
+        super(entryData, locale);
+    }
+
+    public String[] getDeleteComments()
+    {
+        return deleteComments;
+    }
+
+    public void setDeleteComments(String[] deleteIds)
+    {
+        deleteComments = deleteIds;
+    }
+
+    /**
+     * @return
+     */
+    public String[] getSpamComments()
+    {
+        return spamComments;
+    }
+
+    public void setSpamComments(String[] spamIds)
+    {
+        spamComments = spamIds;
+    }
+
+    /**
+     * @return
+     */
+    public String getWeblogEntryId()
+    {
+        return mEntryId;
+    }
+
+    /**
+     * @param string
+     */
+    public void setWeblogEntryId(String string)
+    {
+        mEntryId = string;
+    }
+
+    /**
+     * @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
+     */
+    public void reset(ActionMapping mapping, HttpServletRequest request)
+    {
+        super.reset(mapping, request);
+        deleteComments = null;
+        spamComments = null;
+    }
+
+    /**
+     * @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.ServletRequest)
+     */
+    public void reset(ActionMapping mapping, ServletRequest request)
+    {
+        super.reset(mapping, request);
+        deleteComments = null;
+        spamComments = null;
+    }
+
+}
+

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/ImportEntriesForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/ImportEntriesForm.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/ImportEntriesForm.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/ImportEntriesForm.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,50 @@
+/*
+ * Created on Apr 1, 2004
+ */
+package org.roller.presentation.weblog.formbeans;
+
+import org.apache.struts.action.ActionForm;
+
+import java.util.ArrayList;
+
+/**
+ * @struts.form name="importEntries"
+ * @author lance.lavandowska
+ */
+public class ImportEntriesForm extends ActionForm
+{
+    private ArrayList xmlFiles = new ArrayList();
+    private String importFileName;
+    
+    /**
+     * @return Returns the xmlFiles.
+     */
+    public ArrayList getXmlFiles()
+    {
+        return this.xmlFiles;
+    }
+    
+    /**
+     * @param xmlFiles The xmlFiles to set.
+     */
+    public void setXmlFiles(ArrayList xmlFiles)
+    {
+        this.xmlFiles = xmlFiles;
+    }
+    
+    /**
+     * @return Returns the importFileName.
+     */
+    public String getImportFileName()
+    {
+        return this.importFileName;
+    }
+    
+    /**
+     * @param importFileName The importFileName to set.
+     */
+    public void setImportFileName(String importFileName)
+    {
+        this.importFileName = importFileName;
+    }
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/TrackbackForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/TrackbackForm.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/TrackbackForm.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/TrackbackForm.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,58 @@
+/*
+ * Created on Apr 14, 2003
+ */
+package org.roller.presentation.weblog.formbeans;
+
+import org.apache.struts.action.ActionForm;
+
+/**
+ * Data to be sent in a Trackback.
+ * @author David M Johnson
+ * @struts.form name="trackbackForm"
+ */
+public class TrackbackForm extends ActionForm
+{
+    private String mTrackbackURL = null;
+    private String mEntryId = null;
+    
+    /**
+     * 
+     */
+    public TrackbackForm()
+    {
+        super();
+    }
+
+    /**
+     * @return
+     */
+    public String getEntryId()
+    {
+        return mEntryId;
+    }
+
+    /**
+     * @return
+     */
+    public String getTrackbackURL()
+    {
+        return mTrackbackURL;
+    }
+
+    /**
+     * @param string
+     */
+    public void setEntryId(String string)
+    {
+        mEntryId = string;
+    }
+
+    /**
+     * @param string
+     */
+    public void setTrackbackURL(String string)
+    {
+        mTrackbackURL = string;
+    }
+
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogCategoryFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogCategoryFormEx.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogCategoryFormEx.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogCategoryFormEx.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,77 @@
+package org.roller.presentation.weblog.formbeans;
+
+import org.roller.RollerException;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.presentation.forms.WeblogCategoryForm;
+
+/**
+ * Extends the WeblogCategoryForm so that additional properties may be added.
+ * These properties are not persistent and are only needed for the UI. 
+ * 
+ * @struts.form name="weblogCategoryFormEx"
+ */
+public class WeblogCategoryFormEx extends WeblogCategoryForm
+{
+    private String mParentId = null;
+    private boolean mMoveContents = false;
+    private String mMoveToWeblogCategoryId = null;
+
+    public WeblogCategoryFormEx()
+    {
+        super();
+    }
+
+    public WeblogCategoryFormEx(WeblogCategoryData catData, java.util.Locale locale) throws RollerException
+    {
+        super(catData, locale);
+    }
+
+    public String getParentId()
+    {
+        return mParentId;
+    }
+
+    public void setParentId(String parentId)
+    {
+        mParentId = parentId;
+    }
+
+    /** If true then contents should be moved when this folder is removed */
+    public boolean getMoveContents()
+    {
+        return mMoveContents;
+    }
+    
+    public void setMoveContents(boolean flag)
+    {
+        mMoveContents = flag;
+    }
+
+    /** WeblogCategory where contents should be moved if this cat is removed */
+    public String getMoveToWeblogCategoryId()
+    {
+        return mMoveToWeblogCategoryId;
+    }
+
+    public void setMoveToWeblogCategoryId(String id)
+    {
+        mMoveToWeblogCategoryId = id;
+    }
+    
+    /** 
+     * @see org.roller.presentation.forms.WeblogCategoryForm#copyFrom(org.roller.pojos.WeblogCategoryData)
+     */
+    public void copyFrom(WeblogCategoryData dataHolder, java.util.Locale locale) throws RollerException
+    {
+        super.copyFrom(dataHolder, locale);
+        try
+        {
+            mParentId = dataHolder.getParent().getId();
+        }
+        catch (RollerException e)
+        {
+            throw new RuntimeException("ERROR fetching parent category.");
+        }
+    }
+
+}

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogEntryFormEx.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,363 @@
+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.Iterator;
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 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 Boolean mSendWeblogsPing = Boolean.FALSE;
+    private String[] pluginsArray = new String[0];
+    private String[] deleteComments = new String[0];
+    private String[] spamComments = new String[0];
+    private String trackbackUrl = null;
+    
+    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;
+        initPubTimeDateString(request.getLocale());
+    }
+    
+    /**
+     * Copy values from this Form to the WeblogEntryData.
+     */
+    public void copyTo(WeblogEntryData entry, Locale locale) 
+        throws RollerException
+    {
+        super.copyTo(entry, locale);
+        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.");
+        }
+        final Calendar cal = Calendar.getInstance(locale);
+        cal.setTime(newDate);
+        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);
+        }
+        
+        entry.setCategoryId(getCategoryId());
+    }
+    
+    /**
+     * Copy values from WeblogEntryData to this Form.
+     */
+    public void copyFrom(WeblogEntryData entry, Locale locale) 
+        throws RollerException
+    {
+        super.copyFrom(entry, locale);
+        mCategoryId = entry.getCategory().getId();
+        
+        initPubTimeDateString(locale);
+        
+        if (entry.getPlugins() != null)
+        {
+            pluginsArray = StringUtils.split(entry.getPlugins(), ",");
+        }
+        
+        populateSpamComments(entry);
+    }
+    
+    /**
+     * 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 initPubTimeDateString(Locale locale)
+    {
+        Calendar cal = Calendar.getInstance(locale);
+        cal.setTime(getPubTime());        
+        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;
+    }
+    
+    /**
+     * @return
+     */
+    public Boolean getSendWeblogsPing()
+    {
+        return mSendWeblogsPing;
+    }
+
+    /**
+     * Sets the categoryName.
+     * @param categoryName The categoryName 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;
+    }
+
+    /**
+     * @param boolean1
+     */
+    public void setSendWeblogsPing(Boolean boolean1)
+    {
+        mSendWeblogsPing = boolean1;
+    }
+
+    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/trunk/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/WeblogQueryForm.java Wed Jun  8 09:06:16 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/trunk/src/org/roller/presentation/weblog/formbeans/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/package.html?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/package.html (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/formbeans/package.html Wed Jun  8 09:06:16 2005
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+Form beans for weblog forms.<br>
+</body>
+</html>

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/package.html?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/package.html (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/package.html Wed Jun  8 09:06:16 2005
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+
+<p>
+Struts Actions, Form beans, and JSP tags for Weblog Entry related things
+such as the Weblog Entry Editor, Weblog Comments, Weblog Categories, and such.
+</p>
+
+</body>
+</html>

Added: incubator/roller/trunk/src/org/roller/presentation/weblog/search/FieldConstants.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/search/FieldConstants.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/search/FieldConstants.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/search/FieldConstants.java Wed Jun  8 09:06:16 2005
@@ -0,0 +1,33 @@
+/*
+ * Created on Jul 19, 2003
+ *
+ * Authored by: Mindaugas Idzelis  (min@idzelis.com)
+ */
+package org.roller.presentation.weblog.search;
+
+
+/**
+ * @author aim4min
+ *
+ * To change the template for this generated type comment go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+public final class FieldConstants
+{
+    //~ Static fields/initializers =============================================
+
+    public static final String ANCHOR = "anchor";
+    public static final String UPDATED = "updated";
+    public static final String ID = "id";
+    public static final String USERNAME = "username";
+    public static final String CATEGORY = "cat";
+    public static final String TITLE = "title";
+    public static final String PUBLISHED = "published";
+    public static final String CONTENT = "content";
+    public static final String CONTENT_STORED = "content_stored";
+    public static final String C_CONTENT = "comment";
+    public static final String C_EMAIL = "email";
+    public static final String C_NAME = "name";
+    public static final String CONSTANT = "constant";
+    public static final String CONSTANT_V = "v"; //must be lowercase, or match the transform rules of the analyzer
+}