You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/06/09 05:19:20 UTC
svn commit: r189695 [37/67] - in /incubator/roller/trunk: ./ contrib/
contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/
contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/
contrib/plugins/src/org/roller/presentation/velocity/
contrib/plugins/src/org/roller/presentation/velocity/plugins/
contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/
contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/
contrib/plugins/src/org/roller/presentation/velocity/plugins/email/
contrib/plugins/src/org/roller/presentation/velocity/plugins/jspwiki/
contrib/plugins/src/org/roller/presentation/velocity/plugins/radeox/
contrib/plugins/src/org/roller/presentation/velocity/plugins/readmore/
contrib/plugins/src/org/roller/presentation/velocity/plugins/smileys/
contrib/plugins/src/org/roller/presentation/velocity/plugins/textile/
contrib/plugins/src/org/roller/presentation/velocity/plugins/topictag/
custom/ custom/src/ custom/web/ docs/ docs/images/ docs/installguide/
docs/installguide/old/ docs/userguide/ docs/userguide/images/
docs/userguide/old/ metadata/ metadata/database/
metadata/database/hibernate/ metadata/xdoclet/ nbproject/ personal/
personal/eclipse/ personal/testing/ sandbox/ sandbox/planetroller/
sandbox/planetroller/metadata/ sandbox/planetroller/metadata/database/
sandbox/planetroller/src/ sandbox/planetroller/src/org/
sandbox/planetroller/src/org/roller/
sandbox/planetroller/src/org/roller/tools/
sandbox/planetroller/src/org/roller/tools/planet/
sandbox/planetroller/templates/ sandbox/planetroller/test/
sandbox/planetroller/test/org/ sandbox/planetroller/test/org/roller/
sandbox/planetroller/test/org/roller/model/
sandbox/planetroller/test/org/roller/tools/
sandbox/planetroller/test/org/roller/tools/planet/
sandbox/planetroller/testdata/ sandbox/planetroller/testdata/cache/
sandbox/planetroller/testdata/output/ sandbox/standalone/
sandbox/standalone/jspwiki/ sandbox/standalone/jspwiki/default/
sandbox/standalone/jspwiki/default/images/ sandbox/standalone/lib/
sandbox/standalone/src/ sandbox/standalone/src/org/
sandbox/standalone/src/org/roller/ sandbox/standalone/src/org/roller/jspwiki/
sandbox/standalone/src/org/roller/tomcat/
sandbox/standalone/src/org/roller/util/ sandbox/standalone/tests/
sandbox/standalone/tests/org/ sandbox/standalone/tests/org/roller/
sandbox/standalone/tests/org/roller/util/ sandbox/standalone/tomcat/ src/
src/org/ src/org/roller/ src/org/roller/business/
src/org/roller/business/hibernate/ src/org/roller/business/search/
src/org/roller/business/search/operations/ src/org/roller/business/utils/
src/org/roller/config/ src/org/roller/config/runtime/ src/org/roller/model/
src/org/roller/pojos/ src/org/roller/presentation/
src/org/roller/presentation/atomapi/ src/org/roller/presentation/bookmarks/
src/org/roller/presentation/bookmarks/actions/
src/org/roller/presentation/bookmarks/formbeans/
src/org/roller/presentation/bookmarks/tags/
src/org/roller/presentation/filters/ src/org/roller/presentation/forms/
src/org/roller/presentation/newsfeeds/ src/org/roller/presentation/pagecache/
src/org/roller/presentation/pagecache/rollercache/
src/org/roller/presentation/pings/ src/org/roller/presentation/planet/
src/org/roller/presentation/tags/ src/org/roller/presentation/tags/calendar/
src/org/roller/presentation/tags/menu/ src/org/roller/presentation/util/
src/org/roller/presentation/velocity/ src/org/roller/presentation/weblog/
src/org/roller/presentation/weblog/actions/
src/org/roller/presentation/weblog/formbeans/
src/org/roller/presentation/weblog/tags/ src/org/roller/presentation/website/
src/org/roller/presentation/website/actions/
src/org/roller/presentation/website/formbeans/
src/org/roller/presentation/website/tags/
src/org/roller/presentation/xmlrpc/ src/org/roller/util/
src/org/roller/util/rome/ tests/ tests/org/ tests/org/roller/
tests/org/roller/ant/ tests/org/roller/business/
tests/org/roller/presentation/ tests/org/roller/presentation/atomapi/
tests/org/roller/presentation/bookmarks/
tests/org/roller/presentation/filters/
tests/org/roller/presentation/velocity/
tests/org/roller/presentation/velocity/plugins/
tests/org/roller/presentation/velocity/plugins/smileys/
tests/org/roller/presentation/velocity/plugins/textile/
tests/org/roller/presentation/weblog/ tests/org/roller/presentation/xmlrpc/
tests/org/roller/util/ tests/org/roller/util/rome/ tools/ tools/buildtime/
tools/buildtime/ant-1.6.2/ tools/buildtime/findbugs/
tools/buildtime/findbugs/lib/ tools/buildtime/findbugs/plugin/
tools/buildtime/mockrunner-0.3/ tools/buildtime/mockrunner-0.3/lib/
tools/buildtime/mockrunner-0.35/ tools/buildtime/mockrunner-0.35/lib/
tools/buildtime/tomcat-4.1.24/ tools/buildtime/xdoclet-1.2/
tools/buildtime/xdoclet-1.2/lib/ tools/hibernate-2.1/
tools/hibernate-2.1/lib/ tools/lib/ tools/standard-1.0.3/
tools/standard-1.0.3/lib/ tools/standard-1.0.3/tld/ tools/struts-1.2.4/
tools/struts-1.2.4/lib/ web/ web/WEB-INF/ web/WEB-INF/classes/
web/WEB-INF/classes/flavors/ web/WEB-INF/classes/themes/ web/bookmarks/
web/editor/ web/editor/images/ web/images/ web/images/editor/
web/images/midas/ web/images/preview/ web/images/smileys/ web/planet/
web/tags/ web/templates/ web/theme/ web/theme/images/ web/theme/lavender/
web/theme/scripts/ web/theme/scripts/classes/ web/themes/ web/themes/basic/
web/themes/berkley/ web/themes/berkley/images/ web/themes/brushedmetal/
web/themes/brushedmetal/images/ web/themes/cheb/ web/themes/cheb/images/
web/themes/cheb/scripts/ web/themes/clean/ web/themes/currency-i18n/
web/themes/currency-i18n/images/ web/themes/currency/
web/themes/currency/images/ web/themes/grey2/ web/themes/moonshine/
web/themes/movablemanila/ web/themes/movablemanila/images/
web/themes/pacifica/ web/themes/robot/ web/themes/rolling/
web/themes/rolling/images/ web/themes/sotto/ web/themes/sotto/images/
web/themes/sotto/styles/ web/themes/sunsets/ web/themes/sunsets/images/
web/themes/sunsets/scripts/ web/themes/sunsets/styles/ web/themes/werner/
web/themes/x2/ web/themes/x2/images/ web/themes/x2/scripts/
web/themes/x2/styles/ web/weblog/ web/website/
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,223 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.TreeSet;
+
+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.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.CategoriesForm;
+
+/**
+ * Actions that are initiated from the CategoriesForm.
+ *
+ * @struts.action name="categoriesForm" path="/editor/categories" parameter="method"
+ * @struts.action-forward name="CategoriesForm" path="/weblog/CategoriesForm.jsp"
+ *
+ * @author Dave Johnson
+ */
+public class CategoriesAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(CategoriesAction.class);
+
+ /**
+ * Present the CategoriesForm loaded with category specified by request.
+ * @param mapping Action mapping.
+ * @param actionForm Form bean.
+ * @param request Request.
+ * @param response Response.
+ * @return Forward to CategoriesForm or access-denied.
+ * @throws RollerException
+ */
+ public ActionForward selectCategory(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws RollerException
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if (rreq.isUserAuthorizedToEdit())
+ {
+ addModelObjects(request, (CategoriesForm)actionForm);
+ return mapping.findForward("CategoriesForm");
+ }
+ else
+ {
+ return mapping.findForward("access-denied");
+ }
+ }
+
+ /**
+ * Move Categories and bookmarks indicated by CategoriesForm bean.
+ * @param mapping Action mapping.
+ * @param actionForm Form bean.
+ * @param request Request.
+ * @param response Response.
+ * @return Forward to CategoriesForm or access-denied.
+ * @throws RollerException
+ */
+ public ActionForward moveSelected(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws RollerException
+ {
+ ActionMessages messages = new ActionMessages();
+ ActionForward forward = mapping.findForward("CategoriesForm");
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if (rreq.isUserAuthorizedToEdit())
+ {
+ try
+ {
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+ CategoriesForm form = (CategoriesForm)actionForm;
+
+ mLogger.debug("Moving categories to category, id="
+ + form.getMoveToCategoryId());
+
+ // Move subCategories to new category.
+ String Categories[] = form.getSelectedCategories();
+ WeblogCategoryData parent =
+ wmgr.retrieveWeblogCategory(form.getMoveToCategoryId());
+ if (null != Categories)
+ {
+ for (int i = 0; i < Categories.length; i++)
+ {
+ WeblogCategoryData cd =
+ wmgr.retrieveWeblogCategory(Categories[i]);
+
+ // Don't move category into itself.
+ if ( !cd.getId().equals(parent.getId())
+ && !parent.descendentOf(cd))
+ {
+ cd.setParent(parent);
+ cd.save();
+ }
+ else
+ {
+ messages.add(null, new ActionMessage(
+ "categoriesForm.warn.notMoving",cd.getName()));
+ }
+ }
+ }
+
+ rreq.getRoller().commit();
+
+ addModelObjects(request, (CategoriesForm)actionForm);
+ saveMessages(request, messages);
+ }
+ catch (RollerException e)
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(null, new ActionError("categoriesForm.error.move"));
+ saveErrors(request, errors);
+ }
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ return forward;
+ }
+
+ /**
+ * Load model objects for display in CategoriesForm.
+ * @param request
+ * @throws RollerException
+ */
+ private void addModelObjects(HttpServletRequest request, CategoriesForm form)
+ throws RollerException
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WebsiteData wd = rreq.getWebsite();
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+
+ TreeSet allCategories = new TreeSet(new CategoryPathComparator());
+
+ // Find catid wherever it may be
+ String catId = (String)request.getAttribute(RollerRequest.WEBLOGCATEGORYID_KEY);
+ if (null == catId)
+ {
+ catId = request.getParameter(RollerRequest.WEBLOGCATEGORYID_KEY);
+ }
+ if (null == catId)
+ {
+ catId = form.getId();
+ }
+
+ WeblogCategoryData cat = null;
+ if (null == catId || catId.equals("null"))
+ {
+ cat = wmgr.getRootWeblogCategory(wd);
+ }
+ else
+ {
+ cat = wmgr.retrieveWeblogCategory(catId);
+ }
+ form.setId(cat.getId());
+
+ request.setAttribute("category", cat);
+ request.setAttribute("categories", cat.getWeblogCategories());
+
+ if (null != cat.getParent())
+ {
+ LinkedList catPath = new LinkedList();
+ catPath.add(0, cat);
+ WeblogCategoryData parent = cat.getParent();
+ while (parent != null)
+ {
+ catPath.add(0, parent);
+ parent = parent.getParent();
+ }
+ request.setAttribute("categoryPath", catPath);
+
+ request.setAttribute(
+ RollerRequest.PARENTID_KEY, cat.getParent().getId());
+ }
+
+ // Build collection of all Categories, except for current one,
+ // sorted by path.
+ Iterator iter = wmgr.getWeblogCategories(wd).iterator();
+ while (iter.hasNext())
+ {
+ WeblogCategoryData cd = (WeblogCategoryData) iter.next();
+ if (!cd.getId().equals(catId))
+ {
+ allCategories.add(cd);
+ }
+ }
+ request.setAttribute("allCategories", allCategories);
+ }
+
+ private static final class CategoryPathComparator implements Comparator
+ {
+ public int compare(Object o1, Object o2) {
+ WeblogCategoryData f1 = (WeblogCategoryData)o1;
+ WeblogCategoryData f2 = (WeblogCategoryData)o2;
+ return f1.getPath().compareTo(f2.getPath());
+ }
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,132 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.CategoryDeleteForm;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @struts.action path="/editor/categoryDelete" name="categoryDeleteForm"
+ * @struts.action-forward name="Categories" path="/editor/categories.do?method=selectCategory"
+ * @struts.action-forward name="CategoryDeleteOK" path="/weblog/CategoryDeleteOK.jsp"
+ *
+ * @author Dave Johnson
+ */
+public class CategoryDeleteAction extends Action
+{
+ public ActionForward execute(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ ActionForward forward = null;
+ CategoryDeleteForm form = (CategoryDeleteForm)actionForm;
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+
+ if (rreq.isUserAuthorizedToEdit())
+ {
+ String catid = request.getParameter("catid");
+ WeblogCategoryData catToDelete =
+ wmgr.retrieveWeblogCategory(catid);
+ String returnId = null;
+ if (catToDelete.getParent() != null)
+ {
+ returnId = catToDelete.getParent().getId();
+ }
+ if (form.isDelete() == null)
+ {
+ // Present CategoryDeleteOK? page to user
+ WebsiteData website = rreq.getWebsite();
+ WeblogCategoryData theCat = wmgr.retrieveWeblogCategory(catid);
+ Iterator allCats =
+ wmgr.getWeblogCategories(website).iterator();
+ List destCats = new LinkedList();
+ while (allCats.hasNext())
+ {
+ WeblogCategoryData cat = (WeblogCategoryData)allCats.next();
+ // Allow entries to be moved to any other category except
+ // root and the sub-cats of the category being deleted.
+ if (!cat.getId().equals(catid)
+ && cat.getParent()!=null
+ && !cat.descendentOf(catToDelete))
+ {
+ destCats.add(cat);
+ }
+ }
+ if (destCats.size() > 0)
+ {
+ form.setName(theCat.getName());
+ form.setCatid(catid);
+ form.setCats(destCats);
+ form.setInUse(Boolean.valueOf(catToDelete.isInUse()));
+ forward = mapping.findForward("CategoryDeleteOK");
+ }
+ else
+ {
+ // Can't delete last category, send 'em back!
+ if (null != returnId)
+ {
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, returnId);
+ }
+ forward = mapping.findForward("Categories");
+ }
+ }
+ else if (form.isDelete().booleanValue())
+ {
+ // User clicked YES to delete
+ WeblogCategoryData destCat = null;
+ if (form.getMoveToWeblogCategoryId() != null)
+ {
+ destCat = wmgr.retrieveWeblogCategory(form.getMoveToWeblogCategoryId());
+ }
+
+ // move entries to destCat and remove catToDelete
+ catToDelete.remove(destCat);
+
+ rreq.getRoller().commit();
+
+ if (null != returnId)
+ {
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, returnId);
+ }
+ forward = mapping.findForward("Categories");
+ }
+ else
+ {
+ // User clicked NO to delete, do back to categories form
+ if (null != returnId)
+ {
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, returnId);
+ }
+ forward = mapping.findForward("Categories");
+ }
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ return forward;
+ }
+
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,93 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.WeblogCategoryFormEx;
+
+import java.util.LinkedList;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @struts.action path="/editor/categoryEdit" name="weblogCategoryFormEx" validate="false"
+ * @struts.action-forward name="CategoryForm" path="/weblog/CategoryForm.jsp"
+ *
+ * @author Dave Johnson
+ */
+public class CategoryEditAction extends Action
+{
+ public ActionForward execute(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WebsiteData wd = rreq.getWebsite();
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+ WeblogCategoryFormEx form = (WeblogCategoryFormEx)actionForm;
+
+ WeblogCategoryData parentCat = null;
+ if (null!=rreq.getWeblogCategory() && null==request.getParameter("correct"))
+ {
+ // If request specifies Category and we are not correcting an
+ // already submitted form then load that Category into the form.
+ WeblogCategoryData cd = rreq.getWeblogCategory();
+ form.copyFrom(cd, request.getLocale());
+ request.setAttribute("state","edit");
+
+ // Pass Category's parent id on as attribute.
+ parentCat = cd.getParent();
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, parentCat.getId());
+ }
+ else if (null != request.getParameter("correct"))
+ {
+ // We are correcting a previously submtted form.
+ request.setAttribute("state","correcting");
+
+ // Cat is specified by request param, pass it on as attribute.
+ parentCat = wmgr.retrieveWeblogCategory(rreq.getWeblogCategory().getId());
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, parentCat.getId());
+ }
+ else
+ {
+ // We are adding a new Category
+ request.setAttribute("state","add");
+
+ // Cat is specified by request param, pass it on as attribute.
+ String parentId = request.getParameter(RollerRequest.PARENTID_KEY);
+ form.setParentId(parentId);
+ }
+
+ // Build cat path for display on page
+ if (null != parentCat)
+ {
+ LinkedList categoryPath = new LinkedList();
+ categoryPath.add(0, parentCat);
+ WeblogCategoryData parent = parentCat.getParent();
+ while (parent != null)
+ {
+ categoryPath.add(0, parent);
+ parent = parent.getParent();
+ }
+ request.setAttribute("parentCategory", parentCat);
+ request.setAttribute("categoryPath", categoryPath);
+ }
+
+ return mapping.findForward("CategoryForm");
+ }
+
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,75 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.Action;
+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.roller.RollerPermissionsException;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.WeblogCategoryFormEx;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @struts.action path="/editor/categorySave" name="weblogCategoryFormEx"
+ * validate="true" input="/editor/categoryEdit.do"
+ *
+ * @struts.action-forward name="Categories" path="/editor/categories.do?method=selectCategory"
+ *
+ * @author Dave Johnson
+ */
+public class CategorySaveAction extends Action
+{
+ public ActionForward execute(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ ActionForward forward = mapping.findForward("Categories");
+ try
+ {
+ WeblogCategoryFormEx form = (WeblogCategoryFormEx)actionForm;
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+
+ WeblogCategoryData cd = null;
+ if (null != form.getId() && !form.getId().trim().equals(""))
+ {
+ cd = wmgr.retrieveWeblogCategory(form.getId());
+ cd.save(); // should throw if save not permitted
+ }
+ else
+ {
+ cd = wmgr.createWeblogCategory();
+ cd.setWebsite(rreq.getWebsite());
+
+ String parentId = form.getParentId();
+ cd.setParent(wmgr.retrieveWeblogCategory(parentId));
+ }
+ form.copyTo(cd, request.getLocale());
+ cd.save();
+ rreq.getRoller().commit();
+
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, cd.getParent().getId());
+ }
+ catch (RollerPermissionsException e)
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(null, new ActionError("error.permissions.deniedSave"));
+ saveErrors(request, errors);
+ forward = mapping.findForward("access-denied");
+ }
+ return forward;
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CustomPingTargetsAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CustomPingTargetsAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CustomPingTargetsAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CustomPingTargetsAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,85 @@
+/*
+ * 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.weblog.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.config.PingConfig;
+import org.roller.presentation.forms.PingTargetForm;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Collections;
+
+/**
+ * Administer custom ping targets.
+ *
+ * @struts.action name="pingTargetForm" path="/editor/customPingTargets" scope="request" parameter="method"
+ * @struts.action-forward name="pingTargets.page" path="/weblog/CustomPingTargets.jsp"
+ * @struts.action-forward name="pingTargetEdit.page" path="/weblog/CustomPingTargetEdit.jsp"
+ * @struts.action-forward name="pingTargetDeleteOK.page" path="/weblog/CustomPingTargetDeleteOK.jsp"
+ */
+public class CustomPingTargetsAction
+ extends BasePingTargetsAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(CustomPingTargetsAction.class);
+
+
+ public CustomPingTargetsAction() {
+ super();
+ }
+
+ protected Log getLogger() {
+ return mLogger;
+ }
+
+ /*
+ * Get the ping targets for the view. Here we return the custom ping targets for the
+ * website and set the value of attribute <code>allowCustomTargets</code> in the request.
+ * If custom ping targets have been disallowed, we just return the empty list.
+ */
+ protected List getPingTargets(RollerRequest rreq) throws RollerException
+ {
+ HttpServletRequest req = rreq.getRequest();
+ PingTargetManager pingTargetMgr = rreq.getRoller().getPingTargetManager();
+
+ Boolean allowCustomTargets = new Boolean(!PingConfig.getDisallowCustomTargets());
+ req.setAttribute("allowCustomTargets", allowCustomTargets);
+
+ List customPingTargets = allowCustomTargets.booleanValue() ?
+ pingTargetMgr.getCustomPingTargets(rreq.getWebsite()) : Collections.EMPTY_LIST;
+
+ return customPingTargets;
+ }
+
+ /*
+ * Create a new ping target (blank). Here we create a custom ping target for the website.
+ */
+ protected PingTargetData createPingTarget(RollerRequest rreq, PingTargetForm pingTargetForm)
+ throws RollerException
+ {
+ PingTargetManager pingTargetMgr = rreq.getRoller().getPingTargetManager();
+ return pingTargetMgr.createCustomPingTarget(
+ pingTargetForm.getName(), pingTargetForm.getPingUrl(), rreq.getWebsite());
+ }
+
+
+ /*
+ * Check if the user has editing rights.
+ */
+ protected boolean hasRequiredRights(RollerRequest rreq) throws RollerException
+ {
+ return (rreq.isUserAuthorizedToEdit() && !PingConfig.getDisallowCustomTargets());
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,292 @@
+/*
+ * Created on Mar 25, 2004
+ */
+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.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.apache.struts.util.RequestUtils;
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.BasePageModel;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.velocity.ExportRss;
+import org.roller.presentation.weblog.formbeans.WeblogQueryForm;
+import org.roller.util.DateUtil;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspFactory;
+import javax.servlet.jsp.PageContext;
+
+/**
+ * @struts.action path="/editor/exportEntries" name="weblogQueryForm"
+ * scope="request" parameter="method"
+ *
+ * @struts.action-forward name="exportEntries.page" path="/weblog/export-entries.jsp"
+ *
+ * @author lance.lavandowska
+ */
+public class ExportEntriesAction extends DispatchAction
+{
+ private SimpleDateFormat dayFormat = new SimpleDateFormat("yyyyMMdd");
+ private SimpleDateFormat monthFormat = new SimpleDateFormat("yyyyMM");
+ private SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
+
+ public ActionForward unspecified(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ return edit(mapping, actionForm, request, response);
+ }
+
+ /**
+ * Prepare the form for selecting date-range to export.
+ *
+ * @param mapping
+ * @param actionForm
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("exportEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ else
+ {
+ request.setAttribute("model",
+ new BasePageModel(request, response, mapping));
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ /**
+ * Export entries from the requested date-range to XML.
+ *
+ * @param mapping
+ * @param actionForm
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward export(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("exportEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WeblogQueryForm form = (WeblogQueryForm)actionForm;
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ request.setAttribute("model",
+ new BasePageModel(request, response, mapping));
+
+ Locale locale = Locale.getDefault();//rreq.getWebsite().getLocaleInstance();
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ Date startDate;
+ Date endDate;
+ try
+ {
+ startDate = DateUtil.getStartOfDay(df.parse(form.getStartDateString()));
+ endDate = DateUtil.getEndOfDay(df.parse(form.getEndDateString()));
+ }
+ catch (ParseException e)
+ {
+ throw new RollerException("ERROR parsing date:" + e.getMessage());
+ }
+
+ if (startDate != null && endDate != null)
+ {
+ // this work should go into a Thread!
+ WeblogManager weblogMgr =
+ rreq.getRoller().getWeblogManager();
+
+ //List entries = weblogMgr.getWeblogEntriesInDateRange(
+ //rreq.getUser().getUserName(), null, startDate, endDate, false);
+ //System.out.println("Export: got " + entries.size() + " entries.");
+
+ List entries = weblogMgr.getWeblogEntries(
+ rreq.getWebsite(), // userName
+ startDate, // startDate
+ endDate, // endDate
+ null, // catName
+ WeblogManager.ALL, // status
+ null); // maxEntries
+
+ ActionMessages messages = writeSuccessMessage(request, response, rreq, form);
+
+ // seperate the entries as specified: day, month, year
+ Map entryMap = seperateByPeriod(entries, form.getFileBy());
+
+ // now export each List in the entryMap
+ ExportRss exporter = new ExportRss(rreq.getWebsite());
+ String exportTo = form.getExportFormat().toLowerCase();
+ if ("atom".equals(exportTo))
+ {
+ exporter.setExportAtom(true);
+ }
+ ArrayList fileNames = new ArrayList();
+ Iterator it = entryMap.keySet().iterator();
+ while(it.hasNext())
+ {
+ String key = (String)it.next();
+ ArrayList list = (ArrayList)entryMap.get(key);
+ exporter.exportEntries(list, key+"_"+exportTo+".xml");
+ fileNames.add("Exported " + list.size() + " entry(s) to " + key+"_"+exportTo+".xml<br />");
+ //System.out.println("Exported: " + list.size() + " entries for " + key);
+ }
+
+ StringBuffer fileMessage = new StringBuffer();
+ it = fileNames.iterator();
+ while (it.hasNext())
+ {
+ fileMessage.append((String)it.next());
+ }
+ if (fileMessage.length() > 0)
+ {
+ messages.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("weblogEntryExport.exportFiles",
+ fileMessage.toString()));
+ }
+ saveMessages(request, messages);
+ }
+ else
+ {
+ form.reset(mapping, (ServletRequest)request);
+ return edit(mapping, actionForm, request, response);
+ }
+
+ //forward = mapping.findForward("exportEntries.done");
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ /**
+ * Place entries into Lists, placed into date-related
+ * buckets. The individual buckets may represent a
+ * day, month, or year, depending on which the user specified.
+ *
+ * @param entries
+ * @return
+ */
+ private Map seperateByPeriod(List entries, String period)
+ {
+ HashMap map = new HashMap();
+ WeblogEntryData entry = null;
+ String key = null;
+ ArrayList list = null;
+ SimpleDateFormat formatter = monthFormat;
+ if ("year".equals(period))
+ {
+ formatter = yearFormat;
+ }
+ else if ("day".equals(period))
+ {
+ formatter = dayFormat;
+ }
+
+ Iterator it = entries.iterator();
+ while (it.hasNext())
+ {
+ entry = (WeblogEntryData)it.next();
+ key = formatter.format(entry.getPubTime());
+ list = (ArrayList)map.get(key);
+ if (list == null)
+ {
+ list = new ArrayList();
+ map.put(key, list);
+ }
+ list.add(entry);
+ }
+ return map;
+ }
+
+ private ActionMessages writeSuccessMessage(
+ HttpServletRequest request,
+ HttpServletResponse response,
+ RollerRequest rreq,
+ WeblogQueryForm form) throws MalformedURLException
+ {
+ PageContext pageContext =
+ JspFactory.getDefaultFactory().getPageContext(
+ this.getServlet(), request, response, "", true, 8192, true);
+ Map params = new HashMap();
+ params.put( RollerRequest.USERNAME_KEY, rreq.getUser().getUserName());
+ params.put("rmik", "Files");
+ String filesLink = RequestUtils.computeURL(
+ pageContext, (String)null, (String)null, (String)null,
+ "uploadFiles", params, (String)null, false);
+
+ String message =
+ "Exporting Entries from " +
+ form.getStartDateString() + " to " +
+ form.getEndDateString() + ".<br />" +
+ "Check your <a href=\"" + filesLink + "\">Files</a>.";
+
+ ActionMessages messages = new ActionMessages();
+ messages.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("weblogEntryExport.exportSuccess", message));
+
+ return messages;
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,168 @@
+/*
+ * Created on Mar 31, 2004
+ */
+package org.roller.presentation.weblog.actions;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+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.pojos.UserData;
+import org.roller.presentation.MainPageAction;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.presentation.weblog.formbeans.ImportEntriesForm;
+import org.roller.util.StringUtils;
+
+/**
+ * TODO: revisit this class once Atom 1.0 support comes to Rome
+ * @struts.action name="importEntries" path="/editor/importEntries"
+ * scope="request" parameter="method"
+ *
+ * @struts.action-forward name="importEntries.page" path="/weblog/import-entries.jsp"
+ *
+ * @author lance.lavandowska
+ */
+public class ImportEntriesAction extends DispatchAction
+{
+ public ActionForward importEntries(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("importEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ else
+ {
+ getXmlFiles(actionForm, rreq);
+ ImportEntriesForm form = (ImportEntriesForm)actionForm;
+ if (StringUtils.isNotEmpty(form.getImportFileName()))
+ {
+ // "default" values
+ UserData user = rreq.getUser();
+
+ // load selected file
+ ServletContext app = this.getServlet().getServletConfig().getServletContext();
+ String dir = RollerContext.getUploadDir( app );
+ File f = new File(dir + user.getUserName() +
+ "/" + form.getImportFileName());
+
+ //ArchiveParser archiveParser =
+ //new ArchiveParser(rreq.getRoller(), rreq.getWebsite(), f);
+ String parseMessages = null; // archiveParser.parse();
+
+ // buf will be non-zero if Entries were imported
+ if (parseMessages.length() > 0)
+ {
+ ActionMessages notices = new ActionMessages();
+ notices.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("weblogEntryImport.importFiles",
+ parseMessages));
+ saveMessages(request, notices);
+
+ // Flush the page cache
+ PageCacheFilter.removeFromCache( request, user );
+ // refresh the front page cache
+ MainPageAction.flushMainPageCache();
+ }
+ else
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.importing.entries", ""));
+ saveErrors(request,errors);
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ /**
+ * Load list of XML files available for import.
+ * @param mapping
+ * @param actionForm
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("importEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ else
+ {
+ getXmlFiles(actionForm, rreq);
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ private void getXmlFiles(ActionForm actionForm, RollerRequest rreq)
+ {
+ ServletContext app = this.getServlet().getServletConfig().getServletContext();
+ String dir = RollerContext.getUploadDir( app );
+ File d = new File(dir + rreq.getUser().getUserName());
+ ArrayList xmlFiles = new ArrayList();
+ if (d.mkdirs() || d.exists())
+ {
+ File[] files = d.listFiles();
+ for (int i=0; i<files.length; i++)
+ {
+ if (!files[i].isDirectory() &&
+ files[i].getName().toLowerCase().endsWith(".xml"))
+ // TODO : later change detection to use FileInfo
+ {
+ xmlFiles.add(files[i].getName());
+ }
+ }
+ }
+ ImportEntriesForm form = (ImportEntriesForm)actionForm;
+ form.setXmlFiles(xmlFiles);
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/PingSetupAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/PingSetupAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/PingSetupAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/PingSetupAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,320 @@
+/*
+ * 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.weblog.actions;
+
+import org.apache.struts.actions.DispatchAction;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.action.ActionMessage;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.xmlrpc.XmlRpcException;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.pings.WeblogUpdatePinger;
+import org.roller.config.PingConfig;
+import org.roller.model.PingTargetManager;
+import org.roller.model.AutoPingManager;
+import org.roller.pojos.PingTargetData;
+import org.roller.pojos.WebsiteData;
+import org.roller.pojos.AutoPingData;
+import org.roller.RollerException;
+import org.roller.config.PingConfig;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Collections;
+import java.net.UnknownHostException;
+import java.net.SocketException;
+import java.io.IOException;
+
+
+/**
+ * Actions for setting up automatic ping configuration for a weblog.
+ *
+ * @struts.action name="pingSetupForm" path="/editor/pingSetup" scope="request" parameter="method"
+ * @struts.action-forward name="pingSetup.page" path="/weblog/Pings.jsp"
+ * @struts.action-forward name="pingResult.page" path="/weblog/PingResult.jsp"
+ */
+public class PingSetupAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(PingSetupAction.class);
+
+ private static final String PING_SETUP_PAGE = "pingSetup.page";
+ private static final String PING_RESULT_PAGE = "pingResult.page";
+
+ /* (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 Exception
+ {
+ return view(mapping, actionForm, request, response);
+ }
+
+ /*
+ * Display the common ping targets with page
+ */
+ public ActionForward view(ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ ActionForward forward = mapping.findForward(PING_SETUP_PAGE);
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ PingTargetManager pingTargetMgr = rreq.getRoller().getPingTargetManager();
+ WebsiteData website = rreq.getWebsite();
+ try
+ {
+ if (!isAuthorized(rreq))
+ {
+ return mapping.findForward("access-denied");
+ }
+
+ List commonPingTargets = pingTargetMgr.getCommonPingTargets();
+ req.setAttribute("commonPingTargets", commonPingTargets);
+
+ Boolean allowCustomTargets = new Boolean(!PingConfig.getDisallowCustomTargets());
+ req.setAttribute("allowCustomTargets", allowCustomTargets);
+
+ List customPingTargets = allowCustomTargets.booleanValue() ?
+ pingTargetMgr.getCustomPingTargets(website) : Collections.EMPTY_LIST;
+ req.setAttribute("customPingTargets", customPingTargets);
+
+ // Build isEnabled map (keyed by ping target id and values Boolean.TRUE/Boolean.FALSE)
+ Map isEnabled = buildIsEnabledMap(rreq, commonPingTargets, customPingTargets);
+ req.setAttribute("isEnabled", isEnabled);
+
+ return forward;
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action", e);
+ throw new ServletException(e);
+ }
+ }
+
+ /*
+ * Private helper to build a map indexed by ping target id with values Boolean.TRUE and Boolean.FALSE
+ * based on whether the ping target is enabled (has a corresponding auto ping configuration).
+ */
+ private Map buildIsEnabledMap(RollerRequest rreq, List commonPingTargets, List customPingTargets)
+ throws RollerException
+ {
+ AutoPingManager autoPingMgr = rreq.getRoller().getAutopingManager();
+ WebsiteData website = rreq.getWebsite();
+
+ // Build isEnabled map (keyed by ping target id and values Boolean.TRUE/Boolean.FALSE)
+ Map isEnabled = new HashMap();
+ List autopings = autoPingMgr.getAutoPingsByWebsite(website);
+ // Add the enabled auto ping configs with TRUE
+ for (Iterator i = autopings.iterator(); i.hasNext();)
+ {
+ AutoPingData autoPing = (AutoPingData) i.next();
+ isEnabled.put(autoPing.getPingTarget().getId(), Boolean.TRUE);
+ }
+ // Somewhat awkward, but the two loops save building a separate combined list.
+ // Add disabled common ones with FALSE
+ for (Iterator i = commonPingTargets.iterator(); i.hasNext();)
+ {
+ PingTargetData pingTarget = (PingTargetData) i.next();
+ if (isEnabled.get(pingTarget.getId()) == null)
+ {
+ isEnabled.put(pingTarget.getId(), Boolean.FALSE);
+ }
+ }
+ // Add disabled custom ones with FALSE
+ for (Iterator i = customPingTargets.iterator(); i.hasNext();)
+ {
+ PingTargetData pingTarget = (PingTargetData) i.next();
+ if (isEnabled.get(pingTarget.getId()) == null)
+ {
+ isEnabled.put(pingTarget.getId(), Boolean.FALSE);
+ }
+ }
+ return isEnabled;
+ }
+
+ /*
+ * Enable a ping target.
+ */
+ public ActionForward enableSelected(ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ AutoPingManager autoPingMgr = rreq.getRoller().getAutopingManager();
+ try
+ {
+ if (!isAuthorized(rreq))
+ {
+ return mapping.findForward("access-denied");
+ }
+ PingTargetData pingTarget = select(rreq);
+ AutoPingData autoPing = autoPingMgr.createAutoPing(pingTarget, rreq.getWebsite());
+ autoPingMgr.storeAutoPing(autoPing);
+ rreq.getRoller().commit();
+
+ return view(mapping, form, req, res);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action", e);
+ throw new ServletException(e);
+ }
+ }
+
+ /*
+ * Load delete confirmation view.
+ */
+ public ActionForward disableSelected(ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ AutoPingManager autoPingMgr = rreq.getRoller().getAutopingManager();
+ try
+ {
+ if (!isAuthorized(rreq))
+ {
+ return mapping.findForward("access-denied");
+ }
+ PingTargetData pingTarget = select(rreq);
+ autoPingMgr.removeAutoPing(pingTarget, rreq.getWebsite());
+ rreq.getRoller().commit();
+
+ return view(mapping, form, req, res);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action", e);
+ throw new ServletException(e);
+ }
+ }
+
+ /*
+ * Ping the selected target now.
+ */
+ public ActionForward pingSelectedNow(ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ String absoluteUrl = RollerContext.getRollerContext(req).getAbsoluteContextUrl(req);
+ PingTargetData pingTarget = select(rreq);
+ WebsiteData website = rreq.getWebsite();
+ try
+ {
+ if (!isAuthorized(rreq))
+ {
+ return mapping.findForward("access-denied");
+ }
+ if (PingConfig.getSuspendPingProcessing())
+ {
+ if (mLogger.isDebugEnabled()) mLogger.debug("Ping processing is disabled.");
+ ActionMessages errors = new ActionMessages();
+ errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("ping.pingProcessingIsSuspended"));
+ saveErrors(req, errors);
+ }
+ else
+ {
+ WeblogUpdatePinger.PingResult pingResult = WeblogUpdatePinger.sendPing(absoluteUrl, pingTarget, website);
+ if (pingResult.isError())
+ {
+ if (mLogger.isDebugEnabled()) mLogger.debug("Ping Result: " + pingResult);
+ ActionMessages errors = new ActionMessages();
+ errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("ping.transmittedButErrorReturned"));
+ errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(pingResult.getMessage()));
+ saveErrors(req, errors);
+ }
+ else
+ {
+ ActionMessages messages = new ActionMessages();
+ messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("ping.successful"));
+ saveMessages(req, messages);
+ }
+ }
+ }
+ catch (IOException ex)
+ {
+ mLogger.debug(ex);
+ ActionMessages errors = new ActionMessages();
+ errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("ping.transmissionFailed"));
+ addSpecificMessages(ex, errors);
+ saveErrors(req, errors);
+ }
+ catch (XmlRpcException ex)
+ {
+ mLogger.debug(ex);
+ ActionMessages errors = new ActionMessages();
+ errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("ping.transmissionFailed"));
+ addSpecificMessages(ex, errors);
+ saveErrors(req, errors);
+ }
+ return mapping.findForward(PING_RESULT_PAGE);
+ }
+ catch (Exception ex)
+ {
+ mLogger.error("ERROR in action", ex);
+ throw new ServletException(ex);
+ }
+ }
+
+ // TODO: Consider unifying with other RollerRequest methods
+ // Private helper to get ping target specified by request
+ private PingTargetData select(RollerRequest rreq) throws RollerException
+ {
+ String pingTargetId = rreq.getRequest().getParameter(RollerRequest.PINGTARGETID_KEY);
+ PingTargetManager pingTargetMgr = rreq.getRoller().getPingTargetManager();
+ if (pingTargetId == null || pingTargetId.length() == 0)
+ {
+ throw new RollerException("Missing ping target id: " + pingTargetId);
+ }
+
+ PingTargetData pingTarget = pingTargetMgr.retrievePingTarget(pingTargetId);
+ if (pingTarget == null)
+ {
+ throw new RollerException("No such ping target id: " + pingTargetId);
+ }
+ return pingTarget;
+ }
+
+ private void addSpecificMessages(Exception ex, ActionMessages errors)
+ {
+ if (ex instanceof UnknownHostException)
+ {
+ errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("ping.unknownHost"));
+ }
+ else if (ex instanceof SocketException)
+ {
+ errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("ping.networkConnectionFailed"));
+ }
+ }
+
+ private boolean isAuthorized(RollerRequest rreq) throws RollerException
+ {
+ return rreq.isUserAuthorizedToEdit() && !PingConfig.getDisablePingUsage();
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,152 @@
+
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.model.RefererManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Display today's referers.
+ * @struts.action name="refererForm" path="/editor/referers"
+ * scope="session" parameter="method"
+ *
+ * @struts.action-forward name="referers.page" path="/weblog/referers.jsp"
+ */
+public class ReferersAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(ReferersAction.class);
+
+ public ActionForward unspecified(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ return view(mapping, actionForm, request, response);
+ }
+
+ /**
+ * execute
+ */
+ public ActionForward view(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ ActionForward forward = mapping.findForward("referers.page");
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ RefererManager refmgr = rreq.getRoller().getRefererManager();
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ UserData ud = rreq.getUser();
+
+ req.setAttribute("pageHits",
+ new Integer(refmgr.getDayHits(rreq.getWebsite())));
+
+ req.setAttribute("totalHits",
+ new Integer(refmgr.getTotalHits(rreq.getWebsite())));
+
+ List refs = refmgr.getTodaysReferers(rreq.getWebsite());
+ req.setAttribute("referers",refs);
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+
+ return forward;
+ }
+
+ public ActionForward reset(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ this.servlet.log("ReferersAction.reset()");
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ RefererManager refmgr = rreq.getRoller().getRefererManager();
+ WebsiteData website = rreq.getWebsite();
+ refmgr.forceTurnover(website.getId());
+ rreq.getRoller().commit();
+ }
+ this.servlet.log("ReferersAction.reset(): don't have permission");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return view(mapping, form, req, res);
+ }
+
+ public ActionForward delete(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ //this.servlet.log("ReferersAction.delete()");
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ RefererManager refmgr = rreq.getRoller().getRefererManager();
+ WebsiteData website = rreq.getWebsite();
+
+ String[] deleteIds = req.getParameterValues("id");
+ if (deleteIds != null)
+ {
+ for (int i=0; i<deleteIds.length; i++)
+ {
+ refmgr.removeReferer(deleteIds[i]);
+ }
+ rreq.getRoller().commit();
+ ActionMessages messages = new ActionMessages();
+ messages.add(null, new ActionMessage("referers.deletedReferers"));
+ saveMessages(req, messages);
+ }
+ else
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(null, new ActionError("referers.noReferersSpecified"));
+ saveErrors(req, errors);
+ }
+ }
+ //this.servlet.log("ReferersAction.delete(): don't have permission");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return view(mapping, form, req, res);
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java Wed Jun 8 20:18:46 2005
@@ -0,0 +1,85 @@
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.model.RefererManager;
+import org.roller.pojos.RefererData;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCacheFilter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * Toggle display of a linkback.
+ * @struts.action name="toggleLinkback" path="/editor/toggleLinkback" scope="session"
+ */
+public class ToggleLinkbackDisplayAction extends Action
+{
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ ToggleLinkbackDisplayAction.class);
+
+ /**
+ * execute
+ */
+ public ActionForward execute(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ String userName = rreq.getUser().getUserName();
+
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ String refid = req.getParameter(RollerRequest.REFERERID_KEY);
+ if ( refid != null )
+ {
+ RefererManager refmgr =
+ rreq.getRoller().getRefererManager();
+ RefererData ref = refmgr.retrieveReferer(refid);
+ boolean was = ref.getVisible()==null ?
+ false : ref.getVisible().booleanValue();
+ ref.setVisible(Boolean.valueOf( !was )); // what up, dog?
+ ref.save();
+
+ rreq.getRoller().commit();
+
+ PageCacheFilter.removeFromCache( req, rreq.getUser() );
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Toggling linkback display",e);
+ throw new ServletException(e);
+ }
+
+ // forward to user's website URL
+ String url = null;
+ try
+ {
+ RollerContext rctx = RollerContext.getRollerContext(
+ rreq.getServletContext());
+ url = rctx.getContextUrl( req, userName);
+ res.sendRedirect(url);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Unexpected exception",e);
+ }
+
+ return null;
+ }
+}
+