File Source: FolderEdit.java
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. The ASF licenses this file to You
4 * under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License. For additional information regarding
15 * copyright in this work, please see the NOTICE file in the top level
16 * directory of this distribution.
17 */
18
19 package org.apache.roller.weblogger.ui.struts2.editor;
20
21 import org.apache.commons.lang.StringUtils;
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.roller.weblogger.WebloggerException;
25 import org.apache.roller.weblogger.business.BookmarkManager;
26 import org.apache.roller.weblogger.business.WebloggerFactory;
27 import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
28 import org.apache.roller.weblogger.pojos.WeblogPermission;
29 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
30 import org.apache.roller.weblogger.util.cache.CacheManager;
31 import org.apache.struts2.interceptor.validation.SkipValidation;
32
33
34 /**
35 * Edit an existing folder.
36 */
37 public class FolderEdit extends UIAction {
38
/*
P/P * Method: org.apache.roller.weblogger.ui.struts2.editor.FolderEdit__static_init
*
* Postconditions:
* init'ed(log)
*/
39 private static Log log = LogFactory.getLog(FolderEdit.class);
40
41 // the folder we are editing
42 private WeblogBookmarkFolder folder = null;
43
44 // bean for managing form data
45 private FolderBean bean = new FolderBean();
46
47
/*
P/P * Method: void org.apache.roller.weblogger.ui.struts2.editor.FolderEdit()
*
* Postconditions:
* this.actionName == &"folderEdit"
* this.bean == &new FolderBean(FolderEdit#1)
* this.desiredMenu == &"editor"
* this.folder == null
* this.bean.description == null
* this.bean.id == null
* this.bean.name == null
* this.pageTitle == &"folderForm.edit.title"
* new FolderBean(FolderEdit#1) num objects == 1
*/
48 public FolderEdit() {
49 this.actionName = "folderEdit";
50 this.desiredMenu = "editor";
51 this.pageTitle = "folderForm.edit.title";
52 }
53
54
55 // author perms required
56 public short requiredWeblogPermissions() {
/*
P/P * Method: short requiredWeblogPermissions()
*
* Presumptions:
* init'ed(org.apache.roller.weblogger.pojos.WeblogPermission.AUTHOR)
*
* Postconditions:
* return_value == org.apache.roller.weblogger.pojos.WeblogPermission.AUTHOR
* (soft) init'ed(return_value)
*/
57 return WeblogPermission.AUTHOR;
58 }
59
60
61 // load folder to edit
62 public void myPrepare() {
63 try {
/*
P/P * Method: void myPrepare()
*
* Preconditions:
* (soft) log != null
* (soft) this.bean != null
* (soft) init'ed(this.bean.id)
*
* Presumptions:
* org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@64 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@64 != null
*
* Postconditions:
* possibly_updated(this.folder)
*
* Test Vectors:
* org.apache.commons.lang.StringUtils:isEmpty(...)@65: {1}, {0}
*/
64 BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
65 if(!StringUtils.isEmpty(getBean().getId())) {
66 setFolder(bmgr.getFolder(getBean().getId()));
67 }
68 } catch (WebloggerException ex) {
69 log.error("Error looking up folder", ex);
70 }
71 }
72
73
74 /**
75 * Show folder edit page.
76 */
77 @SkipValidation
78 public String execute() {
79
/*
P/P * Method: String execute()
*
* Preconditions:
* init'ed(this.folder)
* (soft) this.bean != null
*
* Postconditions:
* return_value in Addr_Set{&"input",&"error"}
* possibly_updated(this.bean.description)
* possibly_updated(this.bean.id)
* possibly_updated(this.bean.name)
*
* Test Vectors:
* this.folder: Inverse{null}, Addr_Set{null}
*/
80 if(getFolder() == null) {
81 // TODO: i18n
82 addError("Cannot edit null folder");
83 return ERROR;
84 }
85
86 // make sure bean is properly loaded from pojo data
87 getBean().copyFrom(getFolder());
88
89 return INPUT;
90 }
91
92
93 /**
94 * Save updated folder data.
95 */
96 public String save() {
97
/*
P/P * Method: String save()
*
* Preconditions:
* init'ed(this.folder)
* (soft) log != null
* (soft) this.bean != null
* (soft) init'ed(this.bean.description)
* (soft) init'ed(this.bean.name)
*
* Presumptions:
* org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@113 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@113 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@115 != null
*
* Postconditions:
* return_value in Addr_Set{&"input",&"error"}
*
* Test Vectors:
* this.folder: Inverse{null}, Addr_Set{null}
* org.apache.roller.weblogger.ui.struts2.editor.FolderEdit:hasActionErrors(...)@107: {1}, {0}
*/
98 if(getFolder() == null) {
99 // TODO: i18n
100 addError("Cannot edit null folder");
101 return ERROR;
102 }
103
104 // validation
105 myValidate();
106
107 if(!hasActionErrors()) try {
108
109 // copy updated attributes
110 getBean().copyTo(getFolder());
111
112 // save changes
113 BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
114 bmgr.saveFolder(getFolder());
115 WebloggerFactory.getWeblogger().flush();
116
117 // notify caches
118 CacheManager.invalidate(getFolder());
119
120 // TODO: i18n
121 addMessage("folder updated");
122
123 } catch(Exception ex) {
124 log.error("Error saving folder", ex);
125 // TODO: i18n
126 addError("Error saving folder");
127 }
128
129 return INPUT;
130 }
131
132
133 // TODO: validation
134 public void myValidate() {
135
136 // name is required, has max length, no html
137
138 // make sure new name is not a duplicate of an existing folder
/*
P/P * Method: void myValidate()
*
* Preconditions:
* this.bean != null
* init'ed(this.bean.name)
* this.folder != null
*
* Presumptions:
* org.apache.roller.weblogger.pojos.WeblogBookmarkFolder:getName(...)@139 != null
*
* Test Vectors:
* java.lang.String:equals(...)@139: {1}, {0}
* org.apache.roller.weblogger.pojos.WeblogBookmarkFolder:getParent(...)@140: Addr_Set{null}, Inverse{null}
* org.apache.roller.weblogger.pojos.WeblogBookmarkFolder:hasFolder(...)@141: {0}, {1}
*/
139 if(!getFolder().getName().equals(getBean().getName())) {
140 WeblogBookmarkFolder parent = getFolder().getParent();
141 if(parent != null && parent.hasFolder(getBean().getName())) {
142 addError("folderForm.error.duplicateName", getBean().getName());
143 }
144 }
145 }
146
147
148 public WeblogBookmarkFolder getFolder() {
/*
P/P * Method: WeblogBookmarkFolder getFolder()
*
* Preconditions:
* init'ed(this.folder)
*
* Postconditions:
* return_value == this.folder
* init'ed(return_value)
*/
149 return folder;
150 }
151
152 public void setFolder(WeblogBookmarkFolder folder) {
/*
P/P * Method: void setFolder(WeblogBookmarkFolder)
*
* Postconditions:
* this.folder == folder
* init'ed(this.folder)
*/
153 this.folder = folder;
154 }
155
156 public FolderBean getBean() {
/*
P/P * Method: FolderBean getBean()
*
* Preconditions:
* init'ed(this.bean)
*
* Postconditions:
* return_value == this.bean
* init'ed(return_value)
*/
157 return bean;
158 }
159
160 public void setBean(FolderBean bean) {
/*
P/P * Method: void setBean(FolderBean)
*
* Postconditions:
* this.bean == bean
* init'ed(this.bean)
*/
161 this.bean = bean;
162 }
163
164 }
SofCheck Inspector Build Version : 2.18479
| FolderEdit.java |
2009-Jan-02 14:25:18 |
| FolderEdit.class |
2009-Sep-04 03:12:45 |