Author: gmazza Date: Wed Aug 6 16:09:39 2014 New Revision: 1616263 URL: http://svn.apache.org/r1616263 Log: Consolidated BookmarkAdd into BookmarkEdit.
Removed: roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkAdd.java roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkAdd.jsp Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogBookmark.java roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java roller/trunk/app/src/main/resources/ApplicationResources.properties roller/trunk/app/src/main/resources/struts.xml roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp roller/trunk/app/src/main/webapp/WEB-INF/tiles.xml Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java (original) +++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java Wed Aug 6 16:09:39 2014 @@ -67,11 +67,15 @@ public class JPABookmarkManagerImpl impl public void saveBookmark(WeblogBookmark bookmark) throws WebloggerException { - boolean exists = getBookmark(bookmark.getId()) != null; + boolean exists = getBookmark(bookmark.getId()) != null; if (!exists) { // New object make sure that relationship is set on managed copy of other side bookmark.getFolder().addBookmark(bookmark); } + // set ranking (order of appearance) of bookmark + if (bookmark.getPriority() == null) { + bookmark.calculatePriority(); + } this.strategy.store(bookmark); Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogBookmark.java URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogBookmark.java?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogBookmark.java (original) +++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/pojos/WeblogBookmark.java Wed Aug 6 16:09:39 2014 @@ -62,18 +62,11 @@ public class WeblogBookmark implements S this.url = url; this.feedUrl = feedUrl; this.image = image; - folder.addBookmark(this); - int size = folder.getBookmarks().size(); - if (size == 1) { - this.priority = 0; - } else { - this.priority = folder.getBookmarks().get(size - 2).getPriority() + 1; - } + calculatePriority(); } //------------------------------------------------------------- Attributes - public String getId() { return this.id; } @@ -81,7 +74,16 @@ public class WeblogBookmark implements S public void setId(String id) { this.id = id; } - + + public void calculatePriority() { + int size = folder.getBookmarks().size(); + if (size == 1) { + this.priority = 0; + } else { + this.priority = folder.getBookmarks().get(size - 2).getPriority() + 1; + } + } + /** * Name of bookmark. */ Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java (original) +++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkEdit.java Wed Aug 6 16:09:39 2014 @@ -18,9 +18,6 @@ package org.apache.roller.weblogger.ui.struts2.editor; -import java.net.MalformedURLException; -import java.net.URL; - import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -34,116 +31,99 @@ import org.apache.struts2.interceptor.va /** - * Add a new bookmark to a folder. + * Edit a new or existing bookmark (blogroll item). */ public class BookmarkEdit extends UIAction { private static Log log = LogFactory.getLog(BookmarkEdit.class); - - // the id of the folder we are working with - private String folderId = null; - - // the bookmark we are editing - private WeblogBookmark bookmark = null; - + // bean for managing form data private BookmarkBean bean = new BookmarkBean(); - - + + // the id of the folder holding the bookmark + private String folderId = null; + + // the bookmark we are adding or editing + private WeblogBookmark bookmark = null; + + public BookmarkEdit() { - this.actionName = "bookmarkEdit"; this.desiredMenu = "editor"; - this.pageTitle = "bookmarkForm.edit.title"; } public void myPrepare() { - try { + if (StringUtils.isEmpty(bean.getId())) { + // Create and initialize new, not-yet-saved WeblogBookmark + bookmark = new WeblogBookmark(); BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager(); - if(!StringUtils.isEmpty(getBean().getId())) { - setBookmark(bmgr.getBookmark(getBean().getId())); + try { + if (!StringUtils.isEmpty(getFolderId())) { + bookmark.setFolder(bmgr.getFolder(getFolderId())); + } + } catch (WebloggerException ex) { + addError("generic.error.check.logs"); + log.error("Error looking up folder", ex); + } + } else { + // existing bookmark, retrieve its info from DB + try { + BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager(); + bookmark = bmgr.getBookmark(getBean().getId()); + } catch (WebloggerException ex) { + addError("generic.error.check.logs"); + log.error("Error looking up bookmark" + getBean().getId(), ex); } - } catch (WebloggerException ex) { - log.error("Error looking up bookmark - "+getBean().getId(), ex); } } @SkipValidation public String execute() { - - if(getBookmark() == null) { - addError("Cannot edit null bookmark"); - return ERROR; + if (!isAdd()) { + // make sure bean is populated with DB values on initial load + getBean().copyFrom(getBookmark()); } - - // make sure bean is properly loaded with pojo data - getBean().copyFrom(getBookmark()); - return INPUT; } public String save() { - - if(getBookmark() == null) { - addError("Cannot edit null bookmark"); - return ERROR; - } - + // validation myValidate(); if(!hasActionErrors()) { try { - getBean().copyTo(getBookmark()); - + getBean().copyTo(bookmark); BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager(); - bmgr.saveBookmark(getBookmark()); + bmgr.saveBookmark(bookmark); WebloggerFactory.getWeblogger().flush(); - - CacheManager.invalidate(getBookmark()); - - addMessage("bookmarkForm.changesSaved"); + CacheManager.invalidate(bookmark); + addMessage(isAdd() ? "bookmarkForm.created" : "bookmarkForm.updated", + getBookmark().getName()); + return SUCCESS; } catch(Exception ex) { log.error("Error saving bookmark", ex); - addError("bookmarkForm.error.saving"); + addError("generic.error.check.logs"); } } return INPUT; } - /** - * Cancel. - * - * @return the string - */ - public String cancel() { - return CANCEL; - } - public void myValidate() { - if (StringUtils.isNotEmpty(getBean().getUrl()) && !validURL(getBean().getUrl())) { - addError("bookmarkgetBean().error.invalidURL", getBean().getUrl()); - } - if (StringUtils.isNotEmpty(getBean().getFeedUrl()) && !validURL(getBean().getFeedUrl())) { - addError("bookmarkgetBean().error.invalidURL", getBean().getFeedUrl()); - } - if (StringUtils.isNotEmpty(getBean().getImage()) && !validURL(getBean().getImage())) { - addError("bookmarkgetBean().error.invalidURL", getBean().getImage()); + // if name new or changed, check new name doesn't already exist + if ((isAdd() || !getBean().getName().equals(bookmark.getName())) + && bookmark.getFolder().hasBookmarkOfName(getBean().getName())) { + addError("bookmarkForm.error.duplicateName", getBean().getUrl()); } } - - public boolean validURL(String url) { - boolean valid = false; - try { - URL test = new URL(url); - valid = true; - } catch (MalformedURLException intentionallyIgnored) {} - return valid; + + private boolean isAdd() { + return actionName.equals("bookmarkAdd"); } - + public String getFolderId() { return folderId; } @@ -152,14 +132,6 @@ public class BookmarkEdit extends UIActi this.folderId = folderId; } - public WeblogBookmark getBookmark() { - return bookmark; - } - - public void setBookmark(WeblogBookmark bookmark) { - this.bookmark = bookmark; - } - public BookmarkBean getBean() { return bean; } @@ -167,5 +139,9 @@ public class BookmarkEdit extends UIActi public void setBean(BookmarkBean bean) { this.bean = bean; } - + + // getter needed because JSP reads this object in order to obtain folder name + public WeblogBookmark getBookmark() { + return bookmark; + } } Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java (original) +++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java Wed Aug 6 16:09:39 2014 @@ -85,12 +85,13 @@ public final class EntryEdit extends UIA } public void myPrepare() { - if (getBean().getId() == null) { // new entry? + if (getBean().getId() == null) { // Create and initialize new, not-yet-saved Weblog Entry entry = new WeblogEntry(); entry.setCreatorUserName(getAuthenticatedUser().getUserName()); entry.setWebsite(getActionWeblog()); - } else { // already saved entry + } else { + // already saved entry try { // retrieve from DB WeblogEntry based on ID WeblogEntryManager wmgr = WebloggerFactory.getWeblogger() Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java (original) +++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/ui/struts2/util/UIAction.java Wed Aug 6 16:09:39 2014 @@ -133,8 +133,16 @@ public abstract class UIAction extends A } catch (Exception e) {} return false; } - - + + /** + * Cancel. + * + * @return "CANCEL" string constant. + */ + public String cancel() { + return CANCEL; + } + public String getSiteURL() { return WebloggerRuntimeConfig.getRelativeContextURL(); } Modified: roller/trunk/app/src/main/resources/ApplicationResources.properties URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/ApplicationResources.properties?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/resources/ApplicationResources.properties (original) +++ roller/trunk/app/src/main/resources/ApplicationResources.properties Wed Aug 6 16:09:39 2014 @@ -45,8 +45,10 @@ bookmarkForm.edit.subtitle=Editing bookm bookmarkForm.image=Image URL bookmarkForm.rssUrl=Newsfeed URL bookmarkForm.url=Bookmark URL -bookmarkForm.created=Bookmark created -bookmarkForm.changesSaved=Changes saved +bookmarkForm.created=Bookmark "{0}" created +bookmarkForm.updated=Bookmark "{0}" updated + +bookmarkForm.rootPrompt=Just the {0} and {1} fields are required. # errors from validation Bookmark.error.nameNull=Name is a required field @@ -57,7 +59,6 @@ Bookmark.error.urlBad=The URL you entere Bookmark.error.imageBad=The image URL you entered is not valid Bookmark.error.feedUrlBad=The feed URL you entered is not valid bookmarkForm.error.duplicateName=Bookmark with that name already exists in folder -bookmarkForm.error.saving=Error saving new bookmark # ----------------------------------------------------------- BookmarksForm.jsp @@ -476,7 +477,7 @@ folderForm.edit.title=Edit Folder folderForm.edit.subtitle=Editing bookmark folder [{0}] folderForm.add.success=Folder added -folderForm.update.success=Folder updated +folderForm.update.success=Folder name updated folderForm.error.duplicateName=The folder name {0} is already in use, you will need to choose another Modified: roller/trunk/app/src/main/resources/struts.xml URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/struts.xml?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/resources/struts.xml (original) +++ roller/trunk/app/src/main/resources/struts.xml Wed Aug 6 16:09:39 2014 @@ -362,30 +362,30 @@ class="org.apache.roller.weblogger.ui.struts2.editor.Bookmarks"> <result name="list" type="tiles">.Bookmarks</result> </action> - + <action name="bookmarkAdd!*" method="{1}" - class="org.apache.roller.weblogger.ui.struts2.editor.BookmarkAdd"> - <result name="input" type="tiles">.BookmarkAdd</result> + class="org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit"> + <param name="actionName">bookmarkAdd</param> + <param name="pageTitle">bookmarkForm.add.title</param> + <result name="input" type="tiles">.BookmarkEdit</result> <result name="success" type="chain">bookmarks</result> - <result name="cancel" type="redirectAction"> - <param name="actionName">bookmarks</param> - <param name="weblog">${weblog}</param> - <param name="folderId">${folderId}</param> - <param name="suppressEmptyParameters">true</param> - </result> <result name="error" type="chain">bookmarks</result> </action> <action name="bookmarkEdit!*" method="{1}" class="org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit"> + <param name="actionName">bookmarkEdit</param> + <param name="pageTitle">bookmarkForm.edit.title</param> <result name="input" type="tiles">.BookmarkEdit</result> + <result name="success" type="chain">bookmarks</result> <result name="cancel" type="redirectAction"> <param name="actionName">bookmarks</param> <param name="weblog">${weblog}</param> <param name="folderId">${folderId}</param> + <!-- TODO: Remove in JSP? --> <param name="suppressEmptyParameters">true</param> </result> - <result name="error" type="chain">bookmarks</result> + <result name="error" type="chain">bookmarkEdit</result> </action> <action name="bookmarksImport!*" method="{1}" Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp (original) +++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp Wed Aug 6 16:09:39 2014 @@ -17,18 +17,43 @@ --%> <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> +<%-- Titling, processing actions different between bookmark add and edit --%> +<s:if test="actionName == 'bookmarkEdit'"> + <s:set var="subtitleKey">bookmarkForm.edit.subtitle</s:set> + <s:set var="mainAction">bookmarkEdit</s:set> +</s:if> +<s:else> + <s:set var="subtitleKey">bookmarkForm.add.subtitle</s:set> + <s:set var="mainAction">bookmarkAdd</s:set> +</s:else> + <p class="subtitle"> - <s:text name="bookmarkForm.edit.subtitle" > - <s:param value="bookmark.folder.name" /> + <s:text name="%{#subtitleKey}" > + <s:param value="bookmark.folder.name"/> + </s:text> +</p> + +<p class="pagetip"> + <s:text name="bookmarkForm.rootPrompt"> + <s:param><s:text name="generic.name"/></s:param> + <s:param><s:text name="bookmarkForm.url"/></s:param> </s:text> </p> -<s:form action="bookmarkEdit!save"> +<s:form> <s:hidden name="salt" /> <s:hidden name="weblog" /> - <s:hidden name="bean.id" /> + <%-- + Edit action uses folderId for redirection back to proper bookmarks folder on cancel + (as configured in struts.xml); add action also, plus to know which folder to put new + bookmark in. + --%> <s:hidden name="folderId" /> - + <s:if test="actionName == 'bookmarkEdit'"> + <%-- bean for bookmark add does not have a bean id yet --%> + <s:hidden name="bean.id" /> + </s:if> + <table> <tr> @@ -37,11 +62,6 @@ </tr> <tr> - <td><s:text name="generic.description" /></td> - <td><s:textarea name="bean.description" rows="5" cols="50" /></td> - </tr> - - <tr> <td><s:text name="bookmarkForm.url" /></td> <td><s:textfield name="bean.url" maxlength="255" size="70" /></td> </tr> @@ -52,6 +72,11 @@ </tr> <tr> + <td><s:text name="generic.description" /></td> + <td><s:textarea name="bean.description" rows="5" cols="50" /></td> + </tr> + + <tr> <td><s:text name="bookmarkForm.image" /></td> <td><s:textfield name="bean.image" maxlength="255" size="70" /></td> </tr> @@ -59,8 +84,8 @@ </table> <p> - <s:submit value="%{getText('generic.save')}" /> - <s:submit value="%{getText('generic.cancel')}" action="bookmarkAdd!cancel" /> + <s:submit value="%{getText('generic.save')}" action="%{#mainAction}!save"/> + <s:submit value="%{getText('generic.cancel')}" action="bookmarkEdit!cancel" /> </p> </s:form> Modified: roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp (original) +++ roller/trunk/app/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp Wed Aug 6 16:09:39 2014 @@ -130,7 +130,7 @@ function onMove() <s:url var="editUrl" action="bookmarkEdit"> <s:param name="weblog" value="%{actionWeblog.handle}" /> <s:param name="bean.id" value="#bookmark.id" /> - <s:param name="folderId" value="%{folderId}" suppressEmptyParameters="true" /> + <s:param name="folderId" value="%{folderId}" suppressEmptyParameters="true"/> </s:url> <s:a href="%{editUrl}"><img src='<s:url value="/images/page_white_edit.png"/>' border="0" alt="icon" title="<s:text name='bookmarksForm.edit.tip' />" /></s:a> @@ -170,7 +170,9 @@ function onMove() </s:if> <s:if test="folder.name != 'default'"> - <s:submit value="%{getText('bookmarksForm.deleteFolder')}" action="bookmarks!deleteFolder" onclick="onDeleteFolder();return false;"/> + <span style="float:right"> + <s:submit value="%{getText('bookmarksForm.deleteFolder')}" action="bookmarks!deleteFolder" onclick="onDeleteFolder();return false;"/> + </span> </s:if> </div> Modified: roller/trunk/app/src/main/webapp/WEB-INF/tiles.xml URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/WEB-INF/tiles.xml?rev=1616263&r1=1616262&r2=1616263&view=diff ============================================================================== --- roller/trunk/app/src/main/webapp/WEB-INF/tiles.xml (original) +++ roller/trunk/app/src/main/webapp/WEB-INF/tiles.xml Wed Aug 6 16:09:39 2014 @@ -338,11 +338,6 @@ <put-attribute name="styles" value="/WEB-INF/jsps/tiles/css-sidebar.jsp" /> </definition> - <definition name=".BookmarkAdd" extends=".tiles-tabbedpage" > - <put-attribute name="content" value="/WEB-INF/jsps/editor/BookmarkAdd.jsp" /> - <put-attribute name="styles" value="/WEB-INF/jsps/tiles/css-nosidebar.jsp" /> - </definition> - <definition name=".BookmarkEdit" extends=".tiles-tabbedpage" > <put-attribute name="content" value="/WEB-INF/jsps/editor/BookmarkEdit.jsp" /> <put-attribute name="styles" value="/WEB-INF/jsps/tiles/css-nosidebar.jsp" />