You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/10/21 23:46:28 UTC
svn commit: r327589 [42/72] - in /incubator/roller/branches/roller_1.x: ./
contrib/ contrib/lib/ contrib/plugins/ contrib/plugins/src/
contrib/plugins/src/org/ contrib/plugins/src/org/roller/
contrib/plugins/src/org/roller/presentation/ contrib/plugins...
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WebsiteFormAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WebsiteFormAction.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WebsiteFormAction.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/WebsiteFormAction.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,231 @@
+
+package org.roller.presentation.website.actions;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+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.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.RollerPermissionsException;
+import org.roller.config.RollerRuntimeConfig;
+import org.roller.model.UserManager;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.RollerSession;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.presentation.forms.WebsiteForm;
+import org.roller.presentation.website.formbeans.WebsiteFormEx;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Website Settings action.
+ *
+ * @struts.action name="websiteFormEx" path="/editor/website"
+ * scope="session" parameter="method"
+ *
+ * @struts.action-forward name="editWebsite.page" path="/website/edit-website.jsp"
+ */
+public final class WebsiteFormAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(WebsiteFormAction.class);
+
+ public ActionForward add(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ return update( mapping, actionForm, request, response );
+ }
+
+ //-----------------------------------------------------------------------
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("editWebsite.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ UserData ud = rreq.getUser();
+ request.setAttribute("user",ud);
+
+ WebsiteData hd = rreq.getWebsite();
+ WebsiteForm wf = (WebsiteFormEx)actionForm;
+ wf.copyFrom(hd, request.getLocale());
+
+ List cd = rreq.getRoller().getWeblogManager()
+ .getWeblogCategories(rreq.getWebsite(), true);
+ request.setAttribute("categories",cd);
+
+ List bcd = rreq.getRoller().getWeblogManager()
+ .getWeblogCategories(rreq.getWebsite(), true);
+ request.setAttribute("bloggerCategories",bcd);
+
+ List pages = rreq.getRoller().getUserManager().getPages(rreq.getWebsite());
+ request.setAttribute("pages",pages);
+
+ ServletContext ctx = request.getSession().getServletContext();
+ String editorPages =
+ RollerRuntimeConfig.getProperty("users.editor.pages");
+
+ List epages = Arrays.asList(StringUtils.split(StringUtils.deleteWhitespace(editorPages), ","));
+ request.setAttribute("editorPagesList", epages);
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+
+ //-----------------------------------------------------------------------
+ public ActionForward update(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("editWebsite");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+ UserManager umgr = rreq.getRoller().getUserManager();
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ WebsiteFormEx form = (WebsiteFormEx)actionForm;
+
+ // checkboxes return no value when not checked
+ if (form.getAllowComments() == null)
+ {
+ form.setAllowComments( Boolean.FALSE );
+ }
+ if (form.getEmailComments() == null)
+ {
+ form.setEmailComments( Boolean.FALSE );
+ }
+ if (form.getEnableBloggerApi() == null)
+ {
+ form.setEnableBloggerApi( Boolean.FALSE );
+ }
+
+ /* we don't need this check any longer -- Allen G
+ if(!form.getDefaultPageId().equals(form.getWeblogDayPageId()))
+ {
+ */
+ WebsiteData wd = umgr.retrieveWebsite(form.getId());
+ wd.save(); // should throw if save not permitted
+
+ // ensure isEnabled can't be changed
+ form.setIsEnabled(wd.getIsEnabled());
+ form.copyTo(wd, request.getLocale());
+
+ if (form.getDefaultCategoryId() != null)
+ {
+ WeblogCategoryData defaultCat =
+ wmgr.retrieveWeblogCategory(form.getDefaultCategoryId());
+ wd.setDefaultCategory(defaultCat);
+ }
+
+ if (form.getBloggerCategoryId() != null)
+ {
+ WeblogCategoryData bloggerCat =
+ wmgr.retrieveWeblogCategory(form.getBloggerCategoryId());
+ wd.setBloggerCategory(bloggerCat);
+ }
+
+ wd.save();
+ rreq.getRoller().getRefererManager().applyRefererFilters(wd);
+ rreq.getRoller().commit();
+
+ request.getSession().setAttribute(
+ RollerSession.STATUS_MESSAGE,
+ "Successfully submitted new Weblog templates");
+
+ request.getSession().setAttribute(
+ RollerRequest.WEBSITEID_KEY,form.getId());
+
+ // clear the page cache for this user
+ PageCacheFilter.removeFromCache( request, wd.getUser() );
+
+ // set the Editor Page list
+ ServletContext ctx = request.getSession().getServletContext();
+ String editorPages =
+ RollerRuntimeConfig.getProperty("users.editor.pages");
+
+ List epages = Arrays.asList(StringUtils.split(
+ StringUtils.deleteWhitespace(editorPages), ","));
+ request.setAttribute("editorPagesList", epages);
+ /*
+ }
+ else
+ {
+ request.getSession().setAttribute(
+ RollerSession.ERROR_MESSAGE,
+ "CHANGES REJECTED: Cannot set default page template "
+ +"and day template to same template");
+ }
+ */
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+
+ actionForm.reset(mapping,request);
+ }
+ catch (RollerPermissionsException e)
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(null, new ActionError("error.permissions.deniedSave"));
+ saveErrors(request, errors);
+ forward = mapping.findForward("access-denied");
+ }
+ catch (RollerException re)
+ {
+ mLogger.error("Unexpected exception",re.getRootCause());
+ throw new ServletException(re);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Unexpected exception",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+}
+
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/package.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/package.html (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/actions/package.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title></title>
+</head>
+<body>
+Struts actions for managing Roller config, website settings and admin.
+
+</body>
+</html>
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/MaintenanceForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/MaintenanceForm.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/MaintenanceForm.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/MaintenanceForm.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,11 @@
+package org.roller.presentation.website.formbeans;
+
+import org.apache.struts.action.ActionForm;
+
+/**
+ * @struts.form name="maintenanceForm"
+ * @author Dave M Johnson
+ */
+public class MaintenanceForm extends ActionForm
+{
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/RollerConfigFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/RollerConfigFormEx.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/RollerConfigFormEx.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/RollerConfigFormEx.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,72 @@
+
+package org.roller.presentation.website.formbeans;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.struts.action.ActionMapping;
+import org.roller.RollerException;
+import org.roller.pojos.RollerConfigData;
+import org.roller.presentation.forms.RollerConfigForm;
+
+/**
+ * These properties are not persistent and are only needed for the UI.
+ *
+ * @struts.form name="rollerConfigFormEx"
+ * @author Lance Lavandowska
+ */
+public class RollerConfigFormEx extends RollerConfigForm
+{
+ public RollerConfigFormEx()
+ {
+ }
+
+ public RollerConfigFormEx( RollerConfigData config, java.util.Locale locale ) throws RollerException
+ {
+ super(config, locale);
+ }
+
+ /**
+ * Override for non-primitive values
+ */
+ public void copyFrom(org.roller.pojos.RollerConfigData dataHolder, java.util.Locale locale) throws RollerException
+ {
+ super.copyFrom(dataHolder, locale);
+ fixNulls();
+ this.uploadMaxFileMB = dataHolder.getUploadMaxFileMB();
+ this.uploadMaxDirMB = dataHolder.getUploadMaxDirMB();
+ }
+
+ /**
+ * Override for non-primitive values
+ */
+ public void copyTo(org.roller.pojos.RollerConfigData dataHolder, java.util.Locale locale) throws RollerException
+ {
+ fixNulls();
+ super.copyTo(dataHolder, locale);
+ dataHolder.setUploadMaxFileMB(this.uploadMaxFileMB);
+ dataHolder.setUploadMaxDirMB(this.uploadMaxDirMB);
+ }
+
+ /**
+ * Method allows Struts to handle empty checkboxes for booleans
+ */
+ public void reset(ActionMapping mapping, HttpServletRequest request)
+ {
+ setAbsoluteURL( null );
+ fixNulls();
+ }
+
+ private void fixNulls()
+ {
+ if (getRssUseCache() == null) setRssUseCache( Boolean.FALSE );
+ if (getNewUserAllowed() == null) setNewUserAllowed( Boolean.FALSE );
+ if (getEnableAggregator() == null) setEnableAggregator( Boolean.FALSE );
+ if (getUploadEnabled() == null) setUploadEnabled( Boolean.FALSE );
+ if (getMemDebug() == null) setMemDebug( Boolean.FALSE );
+ if (getAutoformatComments() == null) setAutoformatComments( Boolean.FALSE );
+ if (getEscapeCommentHtml() == null) setEscapeCommentHtml( Boolean.FALSE );
+ if (getEmailComments() == null) setEmailComments( Boolean.FALSE );
+ if (getEnableLinkback() == null) setEnableLinkback( Boolean.FALSE );
+ if (getEncryptPasswords() == null) setEncryptPasswords( Boolean.FALSE );
+ }
+}
\ No newline at end of file
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/ThemeEditorForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/ThemeEditorForm.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/ThemeEditorForm.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/ThemeEditorForm.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,53 @@
+package org.roller.presentation.website.formbeans;
+
+import org.apache.struts.action.ActionForm;
+
+/**
+ * Holds the name of the theme chosen or
+ * the template being edited.
+ *
+ * @struts.form name="themeEditorForm"
+ *
+ * @author llavandowska
+ */
+public class ThemeEditorForm extends ActionForm
+{
+ private String themeName;
+ private String themeTemplate;
+ /**
+ * Returns the themeName.
+ * @return String
+ */
+ public String getThemeName()
+ {
+ return themeName;
+ }
+
+ /**
+ * Returns the themeTemplate.
+ * @return String
+ */
+ public String getThemeTemplate()
+ {
+ return themeTemplate;
+ }
+
+ /**
+ * Sets the themeName.
+ * @param themeName The themeName to set
+ */
+ public void setThemeName(String themeName)
+ {
+ this.themeName = themeName;
+ }
+
+ /**
+ * Sets the themeTemplate.
+ * @param themeTemplate The themeTemplate to set
+ */
+ public void setThemeTemplate(String themeTemplate)
+ {
+ this.themeTemplate = themeTemplate;
+ }
+
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UploadFileForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UploadFileForm.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UploadFileForm.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UploadFileForm.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,48 @@
+
+package org.roller.presentation.website.formbeans;
+
+import org.apache.struts.upload.FormFile;
+
+
+/**
+ * Allows the user to upload a set of files.
+ * @struts.form name="uploadFiles"
+ */
+public class UploadFileForm
+ extends org.apache.struts.action.ActionForm
+{
+ //protected FormFile[] mUploadedFiles = null;
+ protected transient FormFile mUploadedFile = null;
+
+ // The name of file to be deleted
+ protected String[] mDeleteFiles;
+
+ public UploadFileForm()
+ {
+ super();
+ }
+
+ //------------------------------------------------- Property uploadedFiles
+
+ /** files to be written to disk */
+ //public void setUploadedFiles(FormFile[] files) { mUploadedFiles = files; }
+
+ /** files to be written to disk */
+ //public FormFile[] getUploadedFiles() { return mUploadedFiles; }
+
+ /** files to be written to disk */
+ public void setUploadedFile(FormFile file) { mUploadedFile = file; }
+
+ /** files to be written to disk */
+ public FormFile getUploadedFile() { return mUploadedFile; }
+
+ /** files to be deleted from disk **/
+ public void setDeleteFiles(String[] fileNames)
+ {
+ mDeleteFiles = fileNames;
+ }
+
+ /** files to be deleted from disk **/
+ public String[] getDeleteFiles() { return mDeleteFiles; }
+}
+
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserAdminForm.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserAdminForm.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserAdminForm.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserAdminForm.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,110 @@
+
+package org.roller.presentation.website.formbeans;
+
+import java.util.Locale;
+
+import org.apache.struts.action.ActionMapping;
+import org.roller.RollerException;
+import org.roller.pojos.UserData;
+import org.roller.presentation.forms.UserForm;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * These properties are not persistent and are only needed for the UI.
+ *
+ * @struts.form name="userAdminForm"
+ * @author dmj
+ */
+public class UserAdminForm extends UserFormEx
+{
+ private boolean mDelete = false;
+ private Boolean mUserEnabled = Boolean.FALSE;
+ private Boolean mUserAdmin = Boolean.FALSE;
+
+ public UserAdminForm()
+ {
+ super();
+ }
+
+ public UserAdminForm(UserData userData, java.util.Locale locale ) throws RollerException
+ {
+ super(userData, locale);
+ }
+
+ /**
+ * Returns true if delete requested.
+ * @return boolean
+ **/
+ public boolean getDelete()
+ {
+ return mDelete;
+ }
+
+ /**
+ * Sets the Delete member.
+ */
+ public void setDelete(boolean delete)
+ {
+ mDelete = delete;
+ }
+
+ public void reset(ActionMapping mapping, HttpServletRequest request)
+ {
+ super.reset(mapping, request);
+ mDelete = false;
+ }
+
+ /**
+ * @return Returns the mEnabled.
+ */
+ public Boolean getUserEnabled()
+ {
+ return this.mUserEnabled;
+ }
+
+ /**
+ * @param enabled The mEnabled to set.
+ */
+ public void setUserEnabled(Boolean enabled)
+ {
+ this.mUserEnabled = enabled;
+ }
+
+ /**
+ * @return Returns the mUserAdmin.
+ */
+ public Boolean getUserAdmin() {
+ return mUserAdmin;
+ }
+
+ /**
+ * @param userAdmin The mUserAdmin to set.
+ */
+ public void setUserAdmin(Boolean userAdmin) {
+ mUserAdmin = userAdmin;
+ }
+
+ /** Override to grant/revoke admin role depending on form */
+ public void copyTo(UserData user, Locale locale)
+ throws RollerException
+ {
+ super.copyTo(user, locale);
+ if (mUserAdmin.booleanValue())
+ {
+ user.grantRole("admin");
+ }
+ else
+ {
+ user.revokeRole("admin");
+ }
+ }
+
+ /** Override to set "administration" checkbox depending on user's roles */
+ public void copyFrom(UserData user, Locale locale)
+ throws RollerException
+ {
+ super.copyFrom(user, locale);
+ mUserAdmin = user.hasRole("admin") ? Boolean.TRUE : Boolean.FALSE;
+ }
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserFormEx.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserFormEx.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/UserFormEx.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,160 @@
+
+package org.roller.presentation.website.formbeans;
+
+import org.roller.RollerException;
+import org.roller.pojos.UserData;
+import org.roller.presentation.forms.UserForm;
+import org.roller.util.DateUtil;
+
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * Extend form to add extra properties not in generated base.
+ * @struts.form name="userFormEx"
+ */
+public class UserFormEx extends UserForm
+{
+ private String mTheme = null;
+ private String mLocale = null;
+ private String mTimezone = null;
+ private String mPasswordText = null;
+ private String mPasswordConfirm = null;
+ private boolean adminCreated = false;
+
+ public UserFormEx()
+ {
+ super();
+ }
+
+ public UserFormEx( UserData userData, java.util.Locale locale ) throws RollerException
+ {
+ super(userData, locale);
+ }
+
+ public String getTheme()
+ {
+ return mTheme;
+ }
+
+ public void setTheme( String theme )
+ {
+ mTheme = theme;
+ }
+ public String getLocale()
+ {
+ return mLocale;
+ }
+
+ public void setLocale(String locale)
+ {
+ mLocale = locale;
+ }
+
+ public String getTimezone()
+ {
+ return mTimezone;
+ }
+
+ public void setTimezone(String timezone)
+ {
+ mTimezone = timezone;
+ }
+
+ /**
+ * Don't call it "password" because browser will autofill.
+ * @return Returns the passwordText.
+ */
+ public String getPasswordText()
+ {
+ return mPasswordText;
+ }
+
+ /**
+ * Don't call it "password" because browser will autofill.
+ * @param passwordText The passwordText to set.
+ */
+ public void setPasswordText(String passwordText)
+ {
+ mPasswordText = passwordText;
+ }
+
+ /**
+ * @return Returns the passwordConfirm.
+ */
+ public String getPasswordConfirm()
+ {
+ return mPasswordConfirm;
+ }
+
+ /**
+ * @param passwordConfirm The passwordConfirm to set.
+ */
+ public void setPasswordConfirm(String passwordConfirm)
+ {
+ mPasswordConfirm = passwordConfirm;
+ }
+
+ /**
+ * Utility to convert from String to Date.
+ */
+ public void setDateCreatedAsString(String value)
+ {
+ if ( value == null || value.trim().length() == 0 )
+ {
+ this.setDateCreated(null);
+ }
+ else
+ {
+ try
+ {
+ Date pubDate = DateUtil.parse(
+ value, DateUtil.friendlyTimestampFormat());
+ this.setDateCreated(new Timestamp(pubDate.getTime()));
+ }
+ catch (java.text.ParseException pe)
+ {
+ // wasn't proper format, try others
+ Date pubDate = DateUtil.parseFromFormats(value);
+ this.setDateCreated( new Timestamp(pubDate.getTime()) );
+ }
+ }
+ }
+
+ /**
+ * Returns a formatted pubTime string.
+ */
+ public String getDateCreatedAsString()
+ {
+ return DateUtil.friendlyTimestamp(this.getDateCreated());
+ }
+
+
+ /**
+ * Override to prevent password or dateCreated being copied over by form
+ * @see org.roller.presentation.forms.UserForm#copyTo(
+ * org.roller.pojos.UserData, java.util.Locale)
+ */
+ public void copyTo(UserData dataHolder, Locale locale)
+ throws RollerException
+ {
+ String password = dataHolder.getPassword();
+ Date dateCreated = dataHolder.getDateCreated();
+
+ super.copyTo(dataHolder, locale);
+
+ dataHolder.setPassword(password);
+ dataHolder.setDateCreated(dateCreated);
+ }
+
+ /** True if user is being created by an admin */
+ public void setAdminCreated(boolean b) {
+ adminCreated = b;
+ }
+ /** True if user is being created by an admin */
+ public boolean getAdminCreated() {
+ return adminCreated;
+ }
+}
+
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/WebsiteFormEx.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/WebsiteFormEx.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/WebsiteFormEx.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/WebsiteFormEx.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,113 @@
+/*
+ * Created on Feb 14, 2004
+ */
+package org.roller.presentation.website.formbeans;
+
+import org.apache.commons.lang.StringUtils;
+import org.roller.RollerException;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.forms.WebsiteForm;
+
+/**
+ * @struts.form name="websiteFormEx"
+ */
+public class WebsiteFormEx extends WebsiteForm
+{
+ private String bloggerCategoryId;
+ private String defaultCategoryId;
+ private String[] defaultPluginsArray;
+
+ /**
+ * @return Returns the bloggerCategoryId.
+ */
+ public String getBloggerCategoryId()
+ {
+ return bloggerCategoryId;
+ }
+
+ /**
+ * @param bloggerCategoryId The bloggerCategoryId to set.
+ */
+ public void setBloggerCategoryId(String bloggerCategoryId)
+ {
+ this.bloggerCategoryId = bloggerCategoryId;
+ }
+
+ /**
+ * @return Returns the defeaultCategoryId.
+ */
+ public String getDefaultCategoryId()
+ {
+ return defaultCategoryId;
+ }
+
+ /**
+ * @param defeaultCategoryId The defeaultCategoryId to set.
+ */
+ public void setDefaultCategoryId(String defeaultCategoryId)
+ {
+ this.defaultCategoryId = defeaultCategoryId;
+ }
+
+ /**
+ * @return
+ */
+ public String[] getDefaultPluginsArray()
+ {
+ return defaultPluginsArray;
+ }
+
+ /**
+ * @param strings
+ */
+ public void setDefaultPluginsArray(String[] strings)
+ {
+ defaultPluginsArray = strings;
+ }
+
+
+ /**
+ * @see org.roller.presentation.forms.WebsiteForm#copyFrom(org.roller.pojos.WebsiteData)
+ */
+ public void copyFrom(WebsiteData dataHolder, java.util.Locale locale) throws RollerException
+ {
+ super.copyFrom(dataHolder, locale);
+ if (dataHolder.getDefaultCategory() != null)
+ {
+ defaultCategoryId = dataHolder.getDefaultCategory().getId();
+ }
+ if (dataHolder.getBloggerCategory() != null)
+ {
+ bloggerCategoryId = dataHolder.getBloggerCategory().getId();
+ }
+ if (dataHolder.getDefaultPlugins() != null)
+ {
+ defaultPluginsArray = StringUtils.split(dataHolder.getDefaultPlugins(), ",");
+ }
+ }
+
+ /**
+ * @see org.roller.presentation.forms.WebsiteForm#copyTo(org.roller.pojos.WebsiteData)
+ */
+ public void copyTo(WebsiteData dataHolder, java.util.Locale locale) throws RollerException
+ {
+ super.copyTo(dataHolder, locale);
+ dataHolder.setDefaultPlugins( StringUtils.join(this.defaultPluginsArray,",") );
+ }
+
+ public void reset(
+ org.apache.struts.action.ActionMapping mapping,
+ javax.servlet.ServletRequest request)
+ {
+ doReset(mapping, request);
+ defaultPluginsArray = new String[0];
+ }
+
+ public void reset(
+ org.apache.struts.action.ActionMapping mapping,
+ javax.servlet.http.HttpServletRequest request)
+ {
+ doReset(mapping, request);
+ defaultPluginsArray = new String[0];
+ }
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/package.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/package.html (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/formbeans/package.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title></title>
+</head>
+<body>
+Form beans for managing Roller config, website settings and admin.
+
+</body>
+</html>
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/package.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/package.html (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/package.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title></title>
+</head>
+<body>
+ThemeCache keeps us from hitting Velocity/disk so often.
+
+</body>
+</html>
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/AuthorizeUserTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/AuthorizeUserTag.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/AuthorizeUserTag.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/AuthorizeUserTag.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,122 @@
+package org.roller.presentation.website.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.config.ForwardConfig;
+import org.apache.struts.config.ModuleConfig;
+import org.apache.struts.util.RequestUtils;
+import org.roller.pojos.UserData;
+import org.roller.presentation.RollerRequest;
+
+import java.security.Principal;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagSupport;
+
+
+/**
+ * If user is not authorized, forward to specified global forward.
+ * @jsp.tag name="AuthorizeUser"
+ */
+public class AuthorizeUserTag extends TagSupport
+{
+ static final long serialVersionUID = 1684786313445066867L;
+
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ AuthorizeUserTag.class);
+
+ private String name = null;
+ /** @jsp.attribute required="true" */
+ public String getFailureForward() { return (this.name); }
+ public void setFailureForward(String name) {this.name = name;}
+
+ //-----------------------------------------------------------
+ /**
+ * Defer generation until the end of this tag is encountered.
+ *
+ * @exception JspException if a JSP exception has occurred
+ */
+ public int doStartTag() throws JspException
+ {
+ return (SKIP_BODY);
+ }
+
+ //-----------------------------------------------------------
+ /**
+ * Process start tag.
+ * @return EVAL_SKIP_BODY
+ */
+ public int doEndTag() throws JspException
+ {
+ HttpServletRequest req = null;
+ UserData user = null;
+ try
+ {
+ req = (HttpServletRequest)pageContext.getRequest();
+ user = RollerRequest.getRollerRequest(req).getUser();
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in tag",e);
+ throw new JspException(e);
+ }
+
+ Principal prince = req.getUserPrincipal();
+ if ( prince == null || !prince.getName().equals( user.getUserName() ) )
+ {
+ ServletContext ctx = req.getSession().getServletContext();
+ ModuleConfig mConfig = RequestUtils.getModuleConfig(req,ctx);
+ ForwardConfig fConfig = mConfig.findForwardConfig(name);
+ if (fConfig==null)
+ throw new JspException("Forward "+name+"not found");
+
+ // Forward or redirect to the corresponding actual path
+ String path = fConfig.getPath();
+ if (fConfig.getRedirect())
+ {
+ HttpServletResponse response =
+ (HttpServletResponse) pageContext.getResponse();
+ try
+ {
+ response.sendRedirect(response.encodeRedirectURL(path));
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in tag",e);
+ throw new JspException("Error redirecting to forward "+name);
+ }
+ }
+ else
+ {
+ try
+ {
+ pageContext.forward(path);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in tag",e);
+ throw new JspException("Error forward to "+name);
+ }
+ }
+
+ // Skip the remainder of this page
+ return (SKIP_PAGE);
+ }
+ return Tag.SKIP_BODY;
+ }
+
+ //------------------------------------------------------------------------
+ /**
+ * Release any acquired resources.
+ */
+ public void release()
+ {
+ super.release();
+ name = null;
+ }
+}
+
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileManagerTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileManagerTag.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileManagerTag.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileManagerTag.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,166 @@
+package org.roller.presentation.website.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.util.RequestUtils;
+import org.roller.pojos.UserData;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+
+import java.io.File;
+import java.text.Collator;
+import java.text.DecimalFormat;
+import java.util.ResourceBundle;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * @jsp.tag name="FileManager"
+ */
+public class FileManagerTag extends TagSupport
+{
+ static final long serialVersionUID = 5118479809543177187L;
+
+ private transient ResourceBundle bundle =
+ ResourceBundle.getBundle("ApplicationResources");
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RollerRequest.class);
+
+ //-------------------------------------------------------------
+ /**
+ * Process start tag.
+ * @return EVAL_SKIP_BODY
+ */
+ public int doStartTag() throws JspException
+ {
+ JspWriter pw = pageContext.getOut();
+ try
+ {
+ ServletContext app = pageContext.getServletContext();
+
+ // get the root of the /resource directory
+ String dir = RollerContext.getUploadDir( app );
+
+ HttpServletRequest request =
+ (HttpServletRequest)pageContext.getRequest();
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ UserData user = rreq.getUser();
+
+ // for formatting the file size
+ DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
+ format.setMaximumFractionDigits(1);
+ format.setMinimumFractionDigits(0);
+
+ pw.println("<table class=\"rollertable\">");
+ pw.println("<tr class=\"rHeaderTr\">");
+ pw.println(" <th class=\"rollertable\" width=\"95%\">Filename</th>");
+ pw.println(" <th class=\"rollertable\">Size</td>");
+ pw.println(" <th class=\"rollertable\">Delete</td>");
+ pw.println("</tr>");
+
+ // get the files
+ String[] files = new String[0];
+ int numFiles = 0;
+ File d = new File(dir + user.getUserName());
+ if (d.mkdirs() || d.exists())
+ {
+ files = this.fileList(d);
+
+ // print the file list
+ if (files != null && 0 < files.length)
+ {
+ numFiles = files.length;
+
+ /*
+ * Force images array to sort alphabetically, ignoring case.
+ * We have to do this as some servers (Bluestone)
+ * returns them sorted according to upload time.
+ */
+ //Get the Collator for US English and set its strength
+ // to PRIMARY
+ java.text.Collator locCollator =
+ java.text.Collator.getInstance(
+ rreq.getWebsite().getLocaleInstance());
+ locCollator.setStrength(Collator.PRIMARY);
+ java.util.Arrays.sort(files, locCollator);
+
+ File checkSize = null;
+ float totalSize = 0;
+ String fileSize = null;
+ String fileLink = null;
+ for (int i = 0; i < files.length; i++)
+ {
+ checkSize = new File(d, files[i]);
+ totalSize += new Float(checkSize.length()).floatValue();
+ fileSize = format.format(
+ new Float(checkSize.length()).floatValue() / 1024);
+
+ if (i+1 % 2 == 0) pw.print("<tr class=\"rollertable_even\">");
+ else pw.print("<tr class=\"rollertable_odd\">");
+
+ fileLink = RequestUtils.printableURL(
+ RequestUtils.absoluteURL( request,
+ RollerContext.getUploadPath( app ) +
+ "/" + user.getUserName() + "/" + files[i] ) );
+ pw.print("<td class=\"rollertable\"><a href=\"" +
+ fileLink + "\">" + files[i] + "</a></td>");
+ pw.print("<td class=\"rollertable\" align=\"right\">" +
+ fileSize + " kb</td>");
+ pw.print("<td class=\"rollertable\" align=\"center\">" +
+ "<input type=\"checkbox\" name=\"deleteFiles\" " +
+ "value=\"" + files[i] + "\"></td>");
+
+ pw.println("</tr>");
+ }
+
+ // print the total of file sizes
+ fileSize = format.format(totalSize/1024);
+ pw.print("<tr><td align=\"right\">Total:</td>");
+ pw.print("<td align=\"right\">" +
+ fileSize + " kb</td>");
+ }
+ }
+
+ if (numFiles == 0)
+ {
+ pw.print("<tr class=\"rollertable\">");
+ pw.print("<td class=\"rollertable\" colspan=\"3\">");
+ pw.print(bundle.getString("uploadFiles.noFiles")+"</td>");
+ pw.println("</tr>");
+ }
+ pw.println("</table>");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Displaying files",e);
+ throw new JspException(e);
+ }
+ return Tag.SKIP_BODY;
+ }
+
+ /**
+ * Returns a String[] list of files only (excludes directories).
+ **/
+ public String[] fileList(File d)
+ {
+ File[] files = null; //list of files & directories in the image directory
+ java.util.ArrayList images = new java.util.ArrayList();
+
+ files = d.listFiles();
+ for (int i=0; i<files.length; i++)
+ {
+ if (!files[i].isDirectory()) images.add(files[i].getName());
+ }
+
+ String[] myFiles = new String[0];
+ return (String[]) images.toArray(myFiles);
+
+ }
+}
+
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileUploadTag.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileUploadTag.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileUploadTag.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/FileUploadTag.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,133 @@
+package org.roller.presentation.website.tags;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.util.RequestUtils;
+import org.roller.pojos.UserData;
+import org.roller.presentation.RollerRequest;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.text.MessageFormat;
+import java.util.Hashtable;
+import java.util.ResourceBundle;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.tagext.Tag;
+import javax.servlet.jsp.tagext.TagSupport;
+import org.roller.config.RollerRuntimeConfig;
+import org.roller.model.FileManager;
+import org.roller.model.PropertiesManager;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+
+/**
+ * @jsp.tag name="FileUpload"
+ */
+public class FileUploadTag extends TagSupport
+{
+ static final long serialVersionUID = -1278102416194468310L;
+
+ private transient ResourceBundle bundle =
+ ResourceBundle.getBundle("ApplicationResources");
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(FileUploadTag.class);
+
+ //-------------------------------------------------------------
+ /**
+ * Process start tag.
+ * @return EVAL_SKIP_BODY
+ */
+ public int doStartTag() throws JspException
+ {
+ JspWriter pw = pageContext.getOut();
+ try
+ {
+ ServletContext app = pageContext.getServletContext();
+
+ Roller mRoller = RollerFactory.getRoller();
+ PropertiesManager pmgr = mRoller.getPropertiesManager();
+ FileManager fmgr = mRoller.getFileManager();
+
+ String dir = fmgr.getUploadDir();
+
+ HttpServletRequest request =
+ (HttpServletRequest)pageContext.getRequest();
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ UserData user = rreq.getUser();
+
+ String maxDir = RollerRuntimeConfig.getProperty("uploads.dir.maxsize");
+ String maxFile = RollerRuntimeConfig.getProperty("uploads.file.maxsize");
+ BigDecimal maxDirMB = new BigDecimal(maxDir);
+ BigDecimal maxFileMB = new BigDecimal(maxFile);
+
+ int maxDirBytes = (int)(1024000 * maxDirMB.doubleValue());
+
+ // determine the number of bytes in user's directory
+ int userDirSize = 0;
+ File d = new File(dir + user.getUserName());
+ if (d.mkdirs() || d.exists())
+ {
+ File[] files = d.listFiles();
+ long dirSize = 0l;
+ for (int i=0; i<files.length; i++)
+ {
+ if (!files[i].isDirectory())
+ {
+ dirSize = dirSize + files[i].length();
+ }
+ }
+ userDirSize = new Long(dirSize).intValue();
+ }
+
+ boolean uploadEnabled =
+ RollerRuntimeConfig.getBooleanProperty("uploads.enabled");
+
+ if ( !uploadEnabled )
+ {
+ pw.print("<span class=\"error\">");
+ pw.print(bundle.getString("uploadFiles.uploadDisabled"));
+ pw.println("</span>");
+
+ }
+ // if user has exceeded maximum do not allow upload
+ else if ( userDirSize > maxDirBytes )
+ {
+ pw.print("<span class=\"error\">");
+ pw.print(bundle.getString("uploadFiles.exceededQuota"));
+ pw.println("</span><br />");
+ }
+ else
+ {
+ Hashtable params = new Hashtable();
+
+ String edit = RequestUtils.computeURL( pageContext,
+ "uploadFiles", null, null, null, params,null,false);
+ pw.print("<form name=\"uploadFiles\" method=\"post\" ");
+ pw.print("action=\"" + edit + "\" ");
+ pw.println("enctype=\"multipart/form-data\">");
+ pw.println(bundle.getString("uploadFiles.uploadPrompt")+"<br />");
+ pw.print("<input type=\"file\" ");
+ pw.println("name=\"uploadedFile\" size=\"30\" />");
+ pw.println(" ");
+ pw.println("<input type=\"submit\" value=\""
+ +bundle.getString("uploadFiles.upload")+"\" />");
+ pw.println("<input type=\"hidden\" name=\"method\" value=\"upload\" /><br /><br />");
+ pw.println(MessageFormat.format(
+ bundle.getString("uploadFiles.quotaNote"),
+ new String[] {maxFileMB.toString(), maxDirMB.toString()}));
+ pw.println("</form>");
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Exception writing file upload tag",e);
+ throw new JspException(e);
+ }
+ return Tag.SKIP_BODY;
+ }
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/package.html?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/package.html (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/website/tags/package.html Fri Oct 21 14:27:36 2005
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title></title>
+</head>
+<body>
+JSP tags for file manager and user authorization.
+
+</body>
+</html>
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BaseAPIHandler.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BaseAPIHandler.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BaseAPIHandler.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BaseAPIHandler.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,139 @@
+/*
+ * Created on Apr 11, 2003
+ */
+package org.roller.presentation.xmlrpc;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.xmlrpc.XmlRpcException;
+import org.roller.model.UserManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.MainPageAction;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCacheFilter;
+import org.roller.util.Utilities;
+
+import java.io.Serializable;
+import org.roller.config.RollerConfig;
+
+/**
+ * Base API handler does user validation, provides exception types, etc.
+ * @author David M Johnson
+ */
+public class BaseAPIHandler implements Serializable
+{
+ static final long serialVersionUID = -698186274794937582L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(BaseAPIHandler.class);
+
+ public static final int AUTHORIZATION_EXCEPTION = 0001;
+ public static final String AUTHORIZATION_EXCEPTION_MSG =
+ "Invalid Username and/or Password";
+
+ public static final int UNKNOWN_EXCEPTION = 1000;
+ public static final String UNKNOWN_EXCEPTION_MSG =
+ "An error occured processing your request";
+
+ public static final int BLOGGERAPI_DISABLED = 1000;
+ public static final String BLOGGERAPI_DISABLED_MSG =
+ "You have not enabled Blogger API support for your weblog";
+
+ public static final int UNSUPPORTED_EXCEPTION = 1001;
+ public static final String UNSUPPORTED_EXCEPTION_MSG =
+ "Unsupported method - Roller does not support this method";
+
+ public static final int INVALID_POSTID = 2000;
+ public static final String INVALID_POSTID_MSG =
+ "The entry postid you submitted is invalid";
+
+ public static final int NOBLOGS_EXCEPTION = 3000;
+ public static final String NOBLOGS_EXCEPTION_MSG =
+ "There are no categories defined for your user";
+
+ public static final int UPLOAD_DENIED_EXCEPTION = 4000;
+ public static final String UPLOAD_DENIED_EXCEPTION_MSG =
+ "Upload denied";
+
+ //------------------------------------------------------------------------
+ public BaseAPIHandler()
+ {
+ }
+
+ //------------------------------------------------------------------------
+ //public void prep( HttpServletRequest req )
+ //{
+ //mRoller = RollerContext.getRoller(req);
+ //mContextUrl = RollerContext.getRollerContext(req).getAbsoluteContextUrl(req);
+ //
+
+ //------------------------------------------------------------------------
+ protected WebsiteData validate(String username, String password) throws Exception
+ {
+ boolean authenticated = false;
+ boolean enabled = false;
+ WebsiteData website = null;
+ try
+ {
+ // Get Roller request object for current thread
+ RollerRequest rreq = RollerRequest.getRollerRequest();
+
+ UserManager userMgr = rreq.getRoller().getUserManager();
+ website = userMgr.getWebsite(username);
+
+ enabled = website.getEnableBloggerApi().booleanValue();
+ if (enabled)
+ {
+ // are passwords encrypted?
+ RollerContext rollerContext =
+ RollerContext.getRollerContext(rreq.getRequest());
+ String encrypted =
+ RollerConfig.getProperty("passwds.encryption.enabled");
+ //System.out.print("password was [" + password + "] ");
+ if ("true".equalsIgnoreCase(encrypted))
+ {
+ password = Utilities.encodePassword(password,
+ RollerConfig.getProperty("passwds.encryption.algorithm"));
+ }
+ //System.out.println("is now [" + password + "]");
+ authenticated= website.getUser().getPassword().equals(password);
+ if (authenticated)
+ {
+ rreq.getRoller().setUser(website.getUser());
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR internal error validating user", e);
+ }
+
+ if ( !enabled )
+ {
+ throw new XmlRpcException(
+ BLOGGERAPI_DISABLED, BLOGGERAPI_DISABLED_MSG);
+ }
+
+ if ( !authenticated )
+ {
+ throw new XmlRpcException(
+ AUTHORIZATION_EXCEPTION, AUTHORIZATION_EXCEPTION_MSG);
+ }
+ return website;
+ }
+
+ //------------------------------------------------------------------------
+ protected void flushPageCache(String user) throws Exception
+ {
+ // Get Roller request object for current thread
+ RollerRequest rreq = RollerRequest.getRollerRequest();
+
+ UserManager umgr = rreq.getRoller().getUserManager();
+ UserData ud = umgr.getUser(user);
+
+ PageCacheFilter.removeFromCache( rreq.getRequest(), ud );
+ MainPageAction.flushMainPageCache();
+ }
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BloggerAPIHandler.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BloggerAPIHandler.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BloggerAPIHandler.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/presentation/xmlrpc/BloggerAPIHandler.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,504 @@
+
+package org.roller.presentation.xmlrpc;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.xmlrpc.XmlRpcException;
+import org.roller.RollerException;
+import org.roller.model.Roller;
+import org.roller.model.UserManager;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogTemplate;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * Roller XML-RPC Handler for the Blogger v1 API.
+ *
+ * Blogger API spec can be found at http://plant.blogger.com/api/index.html
+ * See also http://xmlrpc.free-conversant.com/docs/bloggerAPI
+ *
+ * @author David M Johnson
+ */
+public class BloggerAPIHandler extends BaseAPIHandler
+{
+ static final long serialVersionUID = 2398898776655115019L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(RollerXMLRPCServlet.class);
+
+ public BloggerAPIHandler()
+ {
+ super();
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Delete a Post
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param postid Unique identifier of the post to be changed
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @param publish Ignored
+ * @throws XmlRpcException
+ * @return
+ */
+ public boolean deletePost(String appkey, String postid, String userid,
+ String password, boolean publish)
+ throws Exception
+ {
+ mLogger.info("deletePost() Called =====[ SUPPORTED ]=====");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" PostId: " + postid);
+ mLogger.info(" UserId: " + userid);
+
+ validate(userid,password);
+
+ Roller roller = RollerRequest.getRollerRequest().getRoller();
+ WeblogManager weblogMgr = roller.getWeblogManager();
+ try
+ {
+ WeblogEntryData entry = weblogMgr.retrieveWeblogEntry(postid);
+ entry.remove();
+ roller.commit();
+ flushPageCache(userid);
+ }
+ catch (Exception e)
+ {
+ String msg = "ERROR in blogger.deletePost: "+e.getClass().getName();
+ mLogger.error(msg,e);
+ e.printStackTrace();
+ throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
+ }
+ return true;
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Edits the main index template of a given blog. Roller only support
+ * updating the main template, the default template of your weblog.
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param blogid Unique identifier of the blog the post will be added to
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @param template The text for the new template (usually mostly HTML).
+ * @param templateType Determines which of the blog's templates is to be set.
+ * @throws XmlRpcException
+ * @return
+ */
+ public boolean setTemplate(String appkey, String blogid, String userid,
+ String password, String templateData,
+ String templateType) throws Exception
+ {
+ mLogger.info("setTemplate() Called =====[ SUPPORTED ]=====");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" BlogId: " + blogid);
+ mLogger.info(" UserId: " + userid);
+ mLogger.info(" Template: " + templateData);
+ mLogger.info(" Type: " + templateType);
+
+ validate(userid,password);
+
+ if (! templateType.equals("main"))
+ {
+ throw new XmlRpcException(
+ UNKNOWN_EXCEPTION, "Roller only supports main template");
+ }
+
+ try
+ {
+ Roller roller = RollerRequest.getRollerRequest().getRoller();
+ UserManager userMgr = roller.getUserManager();
+
+ WeblogTemplate page = userMgr.retrievePage(templateType);
+ page.setContents(templateData);
+ userMgr.storePage(page);
+ flushPageCache(userid);
+
+ return true;
+ }
+ catch (RollerException e)
+ {
+ String msg = "ERROR in BlooggerAPIHander.setTemplate";
+ mLogger.error(msg,e);
+ throw new XmlRpcException(UNKNOWN_EXCEPTION,msg);
+ }
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Returns the main or archive index template of a given blog
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param blogid Unique identifier of the blog the post will be added to
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @param templateType Determines which of the blog's templates will be returned. Currently, either "main" or "archiveIndex"
+ * @throws XmlRpcException
+ * @return
+ */
+ public String getTemplate(String appkey, String blogid, String userid,
+ String password, String templateType)
+ throws Exception
+ {
+ mLogger.info("getTemplate() Called =====[ SUPPORTED ]=====");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" BlogId: " + blogid);
+ mLogger.info(" UserId: " + userid);
+ mLogger.info(" Type: " + templateType);
+
+ validate(userid,password);
+
+ try
+ {
+ Roller roller = RollerRequest.getRollerRequest().getRoller();
+ UserManager userMgr = roller.getUserManager();
+ WeblogTemplate page = userMgr.retrievePage(templateType);
+
+ if ( null == page )
+ {
+ throw new XmlRpcException(UNKNOWN_EXCEPTION,"Template not found");
+ }
+ else
+ {
+ return page.getContents();
+ }
+ }
+ catch (Exception e)
+ {
+ String msg = "ERROR in BlooggerAPIHander.getTemplate";
+ mLogger.error(msg,e);
+ throw new XmlRpcException(UNKNOWN_EXCEPTION,msg);
+ }
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Authenticates a user and returns basic user info (name, email, userid, etc.)
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @throws XmlRpcException
+ * @return
+ */
+ public Object getUserInfo(String appkey, String userid, String password)
+ throws Exception
+ {
+ mLogger.info("getUserInfo() Called =====[ SUPPORTED ]=====");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" UserId: " + userid);
+
+ validate(userid,password);
+
+ try
+ {
+ Roller roller = RollerRequest.getRollerRequest().getRoller();
+ UserManager userMgr = roller.getUserManager();
+ UserData user = userMgr.getUser(userid);
+
+ // parses full name into two strings, firstname and lastname
+ String firstname = "", lastname = "";
+ StringTokenizer toker = new StringTokenizer(user.getFullName());
+
+ if (toker.hasMoreTokens())
+ {
+ firstname = toker.nextToken();
+ }
+
+ while (toker.hasMoreTokens())
+ {
+ if ( !lastname.equals("") )
+ {
+ lastname += " ";
+ }
+ lastname += toker.nextToken();
+ }
+
+ RollerRequest rreq = RollerRequest.getRollerRequest();
+ HttpServletRequest req = rreq.getRequest();
+ String contextUrl =
+ RollerContext.getRollerContext(req).getAbsoluteContextUrl(req);
+
+ // populates user information to return as a result
+ Hashtable result = new Hashtable();
+ result.put("nickname", user.getUserName());
+ result.put("userid", user.getUserName());
+ result.put("url", contextUrl+"/page/"+userid);
+ result.put("email", "");
+ result.put("lastname", lastname);
+ result.put("firstname", firstname);
+
+ return result;
+ }
+ catch (RollerException e)
+ {
+ String msg = "ERROR in BlooggerAPIHander.getInfo";
+ mLogger.error(msg,e);
+ throw new XmlRpcException(UNKNOWN_EXCEPTION,msg);
+ }
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Returns information on all the blogs a given user is a member of
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @throws XmlRpcException
+ * @return
+ */
+ public Object getUsersBlogs(String appkey, String userid, String password)
+ throws Exception
+ {
+ mLogger.info("getUsersBlogs() Called ===[ SUPPORTED ]=======");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" UserId: " + userid);
+
+ WebsiteData website = validate(userid,password);
+
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest();
+ HttpServletRequest req = rreq.getRequest();
+ String contextUrl =
+ RollerContext.getRollerContext(req).getAbsoluteContextUrl(req);
+
+ Hashtable blog = new Hashtable(3);
+ blog.put("url", contextUrl+"/page/"+userid);
+ blog.put("blogid", userid);
+ blog.put("blogName", website.getName());
+
+ Vector result = new Vector();
+ result.add(blog);
+
+ return result;
+ }
+ catch (Exception e)
+ {
+ String msg = "ERROR in BlooggerAPIHander.getUsersBlogs";
+ mLogger.error(msg,e);
+ throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
+ }
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Edits a given post. Optionally, will publish the blog after making the edit
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param postid Unique identifier of the post to be changed
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @param content Contents of the post
+ * @param publish If true, the blog will be published immediately after the post is made
+ * @throws XmlRpcException
+ * @return
+ */
+ public boolean editPost(String appkey, String postid, String userid,
+ String password, String content, boolean publish)
+ throws Exception
+ {
+ mLogger.info("editPost() Called ========[ SUPPORTED ]=====");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" PostId: " + postid);
+ mLogger.info(" UserId: " + userid);
+ mLogger.info(" Publish: " + publish);
+ mLogger.info(" Content:\n " + content);
+
+ validate(userid,password);
+
+ try
+ {
+ Timestamp current = new Timestamp(System.currentTimeMillis());
+
+ Roller roller = RollerRequest.getRollerRequest().getRoller();
+ WeblogManager weblogMgr = roller.getWeblogManager();
+ WeblogEntryData entry = weblogMgr.retrieveWeblogEntry(postid);
+ entry.setText(content);
+ entry.setUpdateTime(current);
+ entry.setPublishEntry(Boolean.valueOf(publish));
+
+ entry.save();
+ roller.commit();
+ flushPageCache(userid);
+ return true;
+ }
+ catch (Exception e)
+ {
+ String msg = "ERROR in BlooggerAPIHander.editPost";
+ mLogger.error(msg,e);
+ throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
+ }
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Makes a new post to a designated blog. Optionally, will publish the blog after making the post
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param blogid Unique identifier of the blog the post will be added to
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @param content Contents of the post
+ * @param publish If true, the blog will be published immediately after the post is made
+ * @throws XmlRpcException
+ * @return
+ */
+ public String newPost(String appkey, String blogid, String userid,
+ String password, String content, boolean publish)
+ throws Exception
+ {
+ mLogger.info("newPost() Called ===========[ SUPPORTED ]=====");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" BlogId: " + blogid);
+ mLogger.info(" UserId: " + userid);
+ mLogger.info(" Publish: " + publish);
+ mLogger.info(" Content:\n " + content);
+
+ WebsiteData website = validate(userid,password);
+
+ // extract the title from the content
+ String title = "";
+
+ if (content.indexOf("<title>") != -1)
+ {
+ title =
+ content.substring(content.indexOf("<title>") + 7,
+ content.indexOf("</title>"));
+ content = StringUtils.replace(content, "<title>"+title+"</title>", "");
+ }
+
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest();
+ Roller roller = rreq.getRoller();
+
+ Timestamp current = new Timestamp(System.currentTimeMillis());
+
+ WeblogEntryData entry = new WeblogEntryData();
+ entry.setTitle(title);
+ entry.setText(content);
+ entry.setPubTime(current);
+ entry.setUpdateTime(current);
+ entry.setWebsite(website);
+ entry.setPublishEntry(Boolean.valueOf(publish));
+ entry.setCategory(website.getBloggerCategory());
+
+ entry.save();
+ roller.commit();
+ flushPageCache(userid);
+/*
+ String blogUrl = Utilities.escapeHTML(
+ RollerContext.getRollerContext(req).getAbsoluteContextUrl(req)
+ + "/page/" + userid);
+ RollerXmlRpcClient.sendWeblogsPing(
+ blogUrl,
+ entry.getWebsite().getName());
+*/
+ return entry.getId();
+ }
+ catch (Exception e)
+ {
+ String msg = "ERROR in BlooggerAPIHander.newPost";
+ mLogger.error(msg,e);
+ throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
+ }
+ }
+
+ //------------------------------------------------------------------------
+
+ /**
+ * This method was added to the Blogger 1.0 API via an Email from Evan
+ * Williams to the Yahoo Group bloggerDev, see the email message for details -
+ * http://groups.yahoo.com/group/bloggerDev/message/225
+ *
+ * @param appkey Unique identifier/passcode of the application sending the post
+ * @param blogid Unique identifier of the blog the post will be added to
+ * @param userid Login for a Blogger user who has permission to post to the blog
+ * @param password Password for said username
+ * @param numposts Number of Posts to Retrieve
+ * @throws XmlRpcException
+ * @return Vector of Hashtables, each containing dateCreated, userid, postid, content
+ */
+ public Object getRecentPosts(
+ String appkey, String blogid, String userid, String password, int numposts)
+ throws Exception
+ {
+ mLogger.info("getRecentPosts() Called ===========[ SUPPORTED ]=====");
+ mLogger.info(" Appkey: " + appkey);
+ mLogger.info(" BlogId: " + blogid);
+ mLogger.info(" UserId: " + userid);
+ mLogger.info(" Number: " + numposts);
+
+ WebsiteData website = validate(userid,password);
+
+ try
+ {
+ Vector results = new Vector();
+
+ Roller roller = RollerRequest.getRollerRequest().getRoller();
+ WeblogManager weblogMgr = roller.getWeblogManager();
+ if (website != null)
+ {
+ Map entries = weblogMgr.getWeblogEntryObjectMap(
+ website, // userName
+ null, // startDate
+ new Date(), // endDate
+ null, // catName
+ WeblogManager.ALL, // status
+ new Integer(numposts)); // maxEntries
+
+ Iterator iter = entries.values().iterator();
+ while (iter.hasNext())
+ {
+ ArrayList list = (ArrayList) iter.next();
+ Iterator i = list.iterator();
+ while (i.hasNext())
+ {
+ WeblogEntryData entry = (WeblogEntryData) i.next();
+ Hashtable result = new Hashtable();
+ result.put("dateCreated", entry.getPubTime());
+ result.put("userid", userid);
+ result.put("postid", entry.getId());
+ result.put("content", entry.getText());
+ results.add(result);
+ }
+ }
+ }
+ return results;
+ }
+ catch (Exception e)
+ {
+ String msg = "ERROR in BlooggerAPIHander.getRecentPosts";
+ mLogger.error(msg,e);
+ throw new XmlRpcException(UNKNOWN_EXCEPTION, msg);
+ }
+ }
+}