KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > roller > ui > authoring > struts > actions > CategoriesAction


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  * Created on Oct 21, 2003
20  */

21 package org.apache.roller.ui.authoring.struts.actions;
22
23 import java.text.MessageFormat JavaDoc;
24 import java.util.Comparator JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.List JavaDoc;
27 import java.util.LinkedList JavaDoc;
28 import java.util.Set JavaDoc;
29 import java.util.TreeSet JavaDoc;
30
31 import javax.servlet.http.HttpServletRequest JavaDoc;
32 import javax.servlet.http.HttpServletResponse JavaDoc;
33
34 import org.apache.commons.logging.Log;
35 import org.apache.commons.logging.LogFactory;
36 import org.apache.struts.action.ActionError;
37 import org.apache.struts.action.ActionErrors;
38 import org.apache.struts.action.ActionForm;
39 import org.apache.struts.action.ActionForward;
40 import org.apache.struts.action.ActionMapping;
41 import org.apache.struts.action.ActionMessage;
42 import org.apache.struts.action.ActionMessages;
43 import org.apache.struts.actions.DispatchAction;
44 import org.apache.roller.RollerException;
45 import org.apache.roller.model.RollerFactory;
46 import org.apache.roller.model.WeblogManager;
47 import org.apache.roller.pojos.WeblogCategoryData;
48 import org.apache.roller.ui.core.BasePageModel;
49 import org.apache.roller.ui.core.RollerRequest;
50 import org.apache.roller.ui.core.RollerSession;
51 import org.apache.roller.ui.authoring.struts.formbeans.CategoriesForm;
52 import org.apache.roller.ui.core.RequestConstants;
53
54 /**
55  * Actions that are initiated from the CategoriesForm.
56  *
57  * @struts.action name="categoriesForm" path="/roller-ui/authoring/categories" parameter="method"
58  * @struts.action-forward name="CategoriesForm" path=".CategoriesForm"
59  *
60  * @author Dave Johnson
61  */

62 public class CategoriesAction extends DispatchAction
63 {
64     private static Log mLogger =
65         LogFactory.getFactory().getInstance(CategoriesAction.class);
66
67     /**
68      * Present the CategoriesForm loaded with category specified by request.
69      * @param mapping Action mapping.
70      * @param actionForm Form bean.
71      * @param request Request.
72      * @param response Response.
73      * @return Forward to CategoriesForm or access-denied.
74      * @throws RollerException
75      */

76     public ActionForward selectCategory(
77         ActionMapping mapping,
78         ActionForm actionForm,
79         HttpServletRequest JavaDoc request,
80         HttpServletResponse JavaDoc response)
81         throws RollerException
82     {
83         CategoriesPageModel pageModel = new CategoriesPageModel(
84                 request, response, mapping, (CategoriesForm)actionForm);
85         RollerSession rses = RollerSession.getRollerSession(request);
86         if (rses.isUserAuthorizedToAuthor(pageModel.getCategory().getWebsite()))
87         {
88             request.setAttribute("model", pageModel);
89             return mapping.findForward("CategoriesForm");
90         }
91         else
92         {
93             return mapping.findForward("access-denied");
94         }
95     }
96
97      /**
98      * Move Categories and bookmarks indicated by CategoriesForm bean.
99      * @param mapping Action mapping.
100      * @param actionForm Form bean.
101      * @param request Request.
102      * @param response Response.
103      * @return Forward to CategoriesForm or access-denied.
104      * @throws RollerException
105      */

106     public ActionForward moveSelected(
107         ActionMapping mapping,
108         ActionForm actionForm,
109         HttpServletRequest JavaDoc request,
110         HttpServletResponse JavaDoc response)
111         throws RollerException
112     {
113         ActionMessages messages = new ActionMessages();
114         ActionForward forward = mapping.findForward("CategoriesForm");
115
116         CategoriesPageModel pageModel = new CategoriesPageModel(
117                 request, response, mapping, (CategoriesForm)actionForm);
118         
119         RollerSession rses = RollerSession.getRollerSession(request);
120         if (rses.isUserAuthorizedToAuthor(pageModel.getCategory().getWebsite()))
121         {
122             request.setAttribute("model", pageModel);
123             try
124             {
125                 WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
126                 CategoriesForm form = (CategoriesForm)actionForm;
127     
128                 mLogger.debug("Moving categories to category, id="
129                     + form.getMoveToCategoryId());
130                     
131                 // Move subCategories to new category.
132
String JavaDoc Categories[] = form.getSelectedCategories();
133                 WeblogCategoryData parent =
134                     wmgr.getWeblogCategory(form.getMoveToCategoryId());
135                 if (null != Categories)
136                 {
137                     for (int i = 0; i < Categories.length; i++)
138                     {
139                         WeblogCategoryData cd =
140                             wmgr.getWeblogCategory(Categories[i]);
141                         
142                         // Don't move category into itself.
143
if ( !cd.getId().equals(parent.getId())
144                              && !parent.descendentOf(cd))
145                         {
146                             cd.setParent(parent);
147                             wmgr.saveWeblogCategory(cd);
148                         }
149                         else
150                         {
151                             messages.add(null, new ActionMessage(
152                                 "categoriesForm.warn.notMoving",cd.getName()));
153                         }
154                     }
155                 }
156                 // TODO: new manager method, moveCategory(cat, newPath)
157
RollerFactory.getRoller().flush();
158                 saveMessages(request, messages);
159             }
160             catch (RollerException e)
161             {
162                 ActionErrors errors = new ActionErrors();
163                 errors.add(null, new ActionError("categoriesForm.error.move"));
164                 saveErrors(request, errors);
165             }
166         }
167         else
168         {
169             forward = mapping.findForward("access-denied");
170         }
171         return forward;
172     }
173
174     private static final class CategoryPathComparator implements Comparator JavaDoc
175     {
176         public int compare(Object JavaDoc o1, Object JavaDoc o2) {
177             WeblogCategoryData f1 = (WeblogCategoryData)o1;
178             WeblogCategoryData f2 = (WeblogCategoryData)o2;
179             return f1.getPath().compareTo(f2.getPath());
180         }
181     }
182     
183     
184     public class CategoriesPageModel extends BasePageModel
185     {
186         private CategoriesForm form = null;
187         private WeblogCategoryData cat = null;
188         private TreeSet JavaDoc allCategories = null;
189         private List JavaDoc catPath = null;
190         
191         public WeblogCategoryData getCategory() { return cat; }
192         public Set JavaDoc getAllCategories() { return allCategories; }
193         public List JavaDoc getCategoryPath() { return catPath; }
194         
195         public CategoriesPageModel(
196                 HttpServletRequest JavaDoc request,
197                 HttpServletResponse JavaDoc response,
198                 ActionMapping mapping,
199                 CategoriesForm form) throws RollerException
200         {
201             super("dummy", request, response, mapping);
202             this.form = form;
203             
204             RollerRequest rreq = RollerRequest.getRollerRequest(request);
205             WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
206
207             allCategories = new TreeSet JavaDoc(new CategoryPathComparator());
208
209             // Find catid wherever it may be
210
String JavaDoc catId = (String JavaDoc)
211                 request.getAttribute(RequestConstants.WEBLOGCATEGORY_ID);
212             if (null == catId)
213             {
214                 catId = request.getParameter(RequestConstants.WEBLOGCATEGORY_ID);
215             }
216             if (null == catId)
217             {
218                 catId = form.getId();
219             }
220
221             cat = null;
222             if (null == catId || catId.equals("null"))
223             {
224                 cat = wmgr.getRootWeblogCategory(website);
225             }
226             else
227             {
228                 cat = wmgr.getWeblogCategory(catId);
229                 website = cat.getWebsite();
230             }
231             form.setId(cat.getId());
232
233             //request.setAttribute("categories", cat.getWeblogCategories());
234

235             if (null != cat.getParent())
236             {
237                 catPath = new LinkedList JavaDoc();
238                 catPath.add(0, cat);
239                 WeblogCategoryData parent = cat.getParent();
240                 while (parent != null)
241                 {
242                     catPath.add(0, parent);
243                     parent = parent.getParent();
244                 }
245                 //request.setAttribute("categoryPath", catPath);
246

247                 request.setAttribute(
248                     RequestConstants.PARENT_ID, cat.getParent().getId());
249             }
250
251             // Build collection of all Categories, except for current one,
252
// sorted by path.
253
Iterator JavaDoc iter = wmgr.getWeblogCategories(website).iterator();
254             while (iter.hasNext())
255             {
256                 WeblogCategoryData cd = (WeblogCategoryData) iter.next();
257                 if (!cd.getId().equals(catId))
258                 {
259                     allCategories.add(cd);
260                 }
261             }
262             // For Struts tags
263
request.setAttribute("allCategories", allCategories);
264             request.setAttribute("category", cat);
265         }
266         public String JavaDoc getTitle()
267         {
268             if (catPath == null || catPath.isEmpty())
269             {
270                 return bundle.getString("categoriesForm.rootTitle");
271             }
272             else
273             {
274                 return MessageFormat.format(
275                         bundle.getString("categoriesForm.parent"),
276                         new Object JavaDoc[] {cat.getName()});
277             }
278         }
279     }
280 }
281
Popular Tags