KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > webapp > action > news > AssignNewsItemRolesAction


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not 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.
15  */

16 package com.blandware.atleap.webapp.action.news;
17
18 import com.blandware.atleap.common.Constants;
19 import com.blandware.atleap.common.NewsModuleConstants;
20 import com.blandware.atleap.model.core.Role;
21 import com.blandware.atleap.model.news.NewsItem;
22 import com.blandware.atleap.search.SearchManager;
23 import com.blandware.atleap.service.core.RoleManager;
24 import com.blandware.atleap.service.news.NewsManager;
25 import com.blandware.atleap.webapp.action.core.BaseAction;
26 import com.blandware.atleap.webapp.form.core.SelectRolesForm;
27 import com.blandware.atleap.webapp.util.news.NewsModuleWebConstants;
28 import org.apache.struts.action.ActionForm;
29 import org.apache.struts.action.ActionForward;
30 import org.apache.struts.action.ActionMapping;
31 import org.apache.struts.action.ActionMessage;
32 import org.apache.struts.action.ActionMessages;
33 import org.springframework.orm.ObjectOptimisticLockingFailureException;
34
35 import javax.servlet.http.HttpServletRequest JavaDoc;
36 import javax.servlet.http.HttpServletResponse JavaDoc;
37 import java.util.ArrayList JavaDoc;
38 import java.util.List JavaDoc;
39 import java.util.Iterator JavaDoc;
40
41 /**
42  * <p>Assigns Roles to news item
43  * </p>
44  * <p><a HREF="AssignNewsItemRolesAction.java.htm"><i>View Source</i></a></p>
45  * <p/>
46  *
47  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
48  * @version $Revision: 1.13 $ $Date: 2006/03/10 17:10:30 $
49  * @struts.action path="/news/assignItemRoles"
50  * name="selectRolesForm"
51  * scope="request"
52  * input="inputForward"
53  * validate="true"
54  * roles="news-item-assignRoles"
55  * @struts.action-forward name="viewNewsItem"
56  * path="/news/viewItem.do"
57  * redirect="true"
58  * @struts.action-forward name="listNewsItems"
59  * path="/news/listItems.do"
60  * redirect="true"
61  * @struts.action-forward name="callAssignRoles"
62  * path="/news/callAssignItemRoles.do"
63  * redirect="false"
64  * @struts.action-forward name="unsatisfiable"
65  * path="/news/listItems.do"
66  */

67 public final class AssignNewsItemRolesAction extends BaseAction {
68     /**
69      * @param mapping The ActionMapping used to select this instance
70      * @param form The optional ActionForm bean for this request (if any)
71      * @param request The HTTP request we are proceeding
72      * @param response The HTTP response we are creating
73      * @return an ActionForward instance describing where and how
74      * control should be forwarded, or null if response
75      * has already been completed
76      */

77     public ActionForward execute(ActionMapping mapping, ActionForm form,
78                                  HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
79
80         if ( !isCancelled(request) ) {
81             // acquire POJOs for all selected roles
82
RoleManager roleManager = (RoleManager) getBean(Constants.ROLE_MANAGER_BEAN);
83             SelectRolesForm selectRolesForm = (SelectRolesForm) form;
84             String JavaDoc[] selectedRoleNames = selectRolesForm.getSelectedRoles();
85
86             List JavaDoc roles = new ArrayList JavaDoc();
87             for ( int i = 0; i < selectedRoleNames.length; i++ ) {
88                 String JavaDoc roleName = selectedRoleNames[i];
89                 Role role = roleManager.retrieveRole(roleName);
90                 if ( role != null ) {
91                     roles.add(role);
92                 }
93             }
94
95             Long JavaDoc newsItemId = (Long JavaDoc) request.getSession().getAttribute(NewsModuleWebConstants.NEWS_ITEM_ID_KEY);
96             NewsManager newsManager = (NewsManager) getBean(NewsModuleConstants.NEWS_MANAGER_BEAN);
97             NewsItem newsItem = newsManager.retrieveNewsItem(newsItemId);
98
99             if ( newsItem == null ) {
100                 // newsItem not found. it might be deleted by someone else
101
ActionMessages errors = new ActionMessages();
102                 errors.add("newsItemNotFound", new ActionMessage("news.errors.notFound"));
103                 saveErrors(request, errors);
104                 return mapping.findForward("listNewsItems");
105             }
106
107             newsItem.setVersion(Long.valueOf(selectRolesForm.getVersion()));
108
109             // remove roles which were unselected
110
// list of roles is copied in order to prevent ConcurrentModifictionException to be thrown
111
List JavaDoc newsItemRoles = new ArrayList JavaDoc(newsItem.getRoles());
112             for ( int i = 0; i < newsItemRoles.size(); i++ ) {
113                 Role role = (Role) newsItemRoles.get(i);
114                 if ( !roles.contains(role) ) {
115                     newsItem.removeRole(role);
116                 }
117             }
118
119             // add new roles
120
for ( Iterator JavaDoc i = roles.iterator(); i.hasNext(); ) {
121                 Role role = (Role) i.next();
122                 newsItem.addRole(role);
123             }
124
125             try {
126                 newsManager.updateNewsItem(newsItem);
127             } catch ( ObjectOptimisticLockingFailureException e ) {
128                 // news item was updated or deleted by another transaction
129
ActionMessages errors = new ActionMessages();
130                 errors.add("updateFailed", new ActionMessage("news.errors.updateFailed"));
131                 saveErrors(request, errors);
132                 request.setAttribute(NewsModuleWebConstants.NEWS_ITEM_ID_KEY, newsItem.getId());
133                 return mapping.findForward("callAssignRoles");
134             }
135
136             //index
137
if ( newsItem.getActive().booleanValue() ) {
138                 SearchManager searchManager = SearchManager.getInstance(request.getSession().getServletContext());
139                 searchManager.reIndexPage(newsItem, request);
140             }
141
142         }
143         return mapping.findForward("listNewsItems");
144     }
145 }
Popular Tags