KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > info > jtrac > web > DefaultMultiActionController


1 /*
2  * Copyright 2002-2005 the original author or authors.
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
17 package info.jtrac.web;
18
19 import info.jtrac.domain.Config;
20 import info.jtrac.domain.ItemSearch;
21 import info.jtrac.domain.User;
22 import info.jtrac.domain.UserSpaceRole;
23 import info.jtrac.util.AttachmentUtils;
24 import info.jtrac.util.ExcelUtils;
25 import info.jtrac.util.SecurityUtils;
26 import info.jtrac.util.SvnUtils;
27 import info.jtrac.util.UserUtils;
28
29 import java.io.OutputStream JavaDoc;
30 import java.util.HashMap JavaDoc;
31 import java.util.Locale JavaDoc;
32 import java.util.Map JavaDoc;
33 import javax.servlet.ServletOutputStream JavaDoc;
34
35 import javax.servlet.http.Cookie JavaDoc;
36 import javax.servlet.http.HttpServletRequest JavaDoc;
37 import javax.servlet.http.HttpServletResponse JavaDoc;
38
39 import org.acegisecurity.AuthenticationException;
40 import org.acegisecurity.ui.AbstractProcessingFilter;
41 import org.acegisecurity.ui.AuthenticationEntryPoint;
42 import org.acegisecurity.ui.cas.CasProcessingFilterEntryPoint;
43 import org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices;
44 import org.acegisecurity.ui.webapp.AuthenticationProcessingFilter;
45 import org.jfree.chart.ChartFactory;
46 import org.jfree.chart.ChartUtilities;
47 import org.jfree.chart.JFreeChart;
48 import org.jfree.chart.plot.PlotOrientation;
49 import org.jfree.data.category.DefaultCategoryDataset;
50 import org.springframework.context.MessageSource;
51 import org.springframework.web.servlet.ModelAndView;
52 import org.springframework.web.servlet.support.RequestContextUtils;
53 import org.springframework.web.util.WebUtils;
54 import org.springframework.webflow.execution.FlowExecution;
55
56 public class DefaultMultiActionController extends AbstractMultiActionController {
57     
58     private AuthenticationEntryPoint authenticationEntryPoint;
59
60     public void setAuthenticationEntryPoint(AuthenticationEntryPoint authenticationEntryPoint) {
61         this.authenticationEntryPoint = authenticationEntryPoint;
62     }
63     
64     public ModelAndView loginHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
65         if (authenticationEntryPoint instanceof CasProcessingFilterEntryPoint) {
66             logger.info("CAS mode detected, attempting CasProcessingFilterEntryPoint");
67             authenticationEntryPoint.commence(request, response, null);
68             return null;
69         }
70         ModelAndView mav = new ModelAndView("login");
71         if (request.getParameter("error") != null) {
72             AuthenticationException ae = (AuthenticationException) WebUtils.getSessionAttribute(request, AbstractProcessingFilter.ACEGI_SECURITY_LAST_EXCEPTION_KEY);
73             mav.addObject("message", ae.getMessage());
74         }
75         String JavaDoc loginName = (String JavaDoc) WebUtils.getSessionAttribute(request, AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY);
76         mav.addObject("loginName", loginName);
77         UserUtils.refreshLocale(request, response, jtrac.getDefaultLocale());
78         return mav;
79     }
80
81     public ModelAndView logoutHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
82         // next line moved to logout.jsp otherwise locale resolving issues
83
// request.getSession().invalidate();
84
Cookie JavaDoc terminate = new Cookie JavaDoc(TokenBasedRememberMeServices.ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE_KEY, null);
85         terminate.setMaxAge(0);
86         terminate.setPath(request.getContextPath());
87         response.addCookie(terminate);
88         return new ModelAndView("logout");
89     }
90
91     public ModelAndView dashboardHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
92         User user = SecurityUtils.getPrincipal();
93         ModelAndView mav = new ModelAndView("dashboard");
94         mav.addObject("countsHolder", jtrac.loadCountsForUser(user));
95         mav.addObject("principal", user);
96         // performance hack, because of the principal (loaded by Acegi) not in sync with our
97
// open session in view. Basically cache the "SpacesWhereAbleToCreateNewItem" else
98
// rendering dashboard would require a lot of extra queries to load Space + Metadata
99
// which the userSpaceRole.isAbleToCreateNewItem() method requires
100
if (user.getSpacesWhereAbleToCreateNewItem() == null && user.getId() > 0) {
101             Map JavaDoc<Long JavaDoc, Boolean JavaDoc> map = new HashMap JavaDoc<Long JavaDoc, Boolean JavaDoc>();
102             for(UserSpaceRole usr : jtrac.loadUser(user.getId()).getSpaceRoles()) {
103                 if (usr.isAbleToCreateNewItem()) {
104                     map.put(usr.getSpace().getId(), true);
105                 }
106             }
107             user.setSpacesWhereAbleToCreateNewItem(map);
108         }
109         applyCacheSeconds(response, 0, true);
110         return mav;
111     }
112
113     public ModelAndView optionsHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
114         return new ModelAndView("options");
115     }
116     
117     public ModelAndView svnFormHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
118         return new ModelAndView("svn_form");
119     }
120     
121     public ModelAndView reindexHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
122         jtrac.rebuildIndexes();
123         return new ModelAndView("index_rebuild_success");
124     }
125     
126     public ModelAndView svnViewHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
127         String JavaDoc url = request.getParameter("url");
128         String JavaDoc username = request.getParameter("username");
129         String JavaDoc password = request.getParameter("password");
130         Map JavaDoc<String JavaDoc, Integer JavaDoc> commitsPerCommitter = SvnUtils.getCommitsPerCommitter(SvnUtils.getRepository(url, username, password));
131         request.getSession().setAttribute("commitsPerCommitter", commitsPerCommitter);
132         return new ModelAndView("svn_view");
133     }
134
135     public ModelAndView attachmentViewHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
136         AttachmentUtils.download(getServletContext(), request, response);
137         return null;
138     }
139
140     public ModelAndView svnCommitsPerCommitterChartHandler(HttpServletRequest JavaDoc request,
141             HttpServletResponse JavaDoc response) throws Exception JavaDoc {
142         Map JavaDoc<String JavaDoc, Integer JavaDoc> commitsPerCommitter = (Map JavaDoc<String JavaDoc, Integer JavaDoc>) request.getSession().getAttribute("commitsPerCommitter");
143         request.getSession().setAttribute("commitsPerCommitter", null);
144         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
145         for (Map.Entry JavaDoc<String JavaDoc, Integer JavaDoc> entry : commitsPerCommitter.entrySet()) {
146             dataset.addValue(entry.getValue(), "Commits", entry.getKey());
147         }
148         JFreeChart chart = ChartFactory.createBarChart(null, null, null, dataset, PlotOrientation.VERTICAL, false, false, false);
149         response.setContentType("image/jpeg");
150         OutputStream JavaDoc out = response.getOutputStream();
151         ChartUtilities.writeChartAsJPEG(out, chart, 600, 300);
152         out.close();
153         return null;
154     }
155
156     public ModelAndView userListHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
157         return new ModelAndView("user_list", "users", jtrac.findAllUsers());
158     }
159
160     public ModelAndView spaceListHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
161         return new ModelAndView("space_list", "spaces", jtrac.findAllSpaces());
162     }
163
164     public ModelAndView configListHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
165         Map JavaDoc<String JavaDoc, Object JavaDoc> model = new HashMap JavaDoc<String JavaDoc, Object JavaDoc>();
166         model.put("configMap", jtrac.loadAllConfig());
167         model.put("configParams", Config.getParams());
168         return new ModelAndView("config_list", model);
169     }
170     
171     public ModelAndView itemListExcelHandler(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
172         FlowExecution flow = getFlowExecution(request, response);
173         ItemSearch itemSearch = (ItemSearch) flow.getActiveSession().getScope().get("itemSearch");
174         int pageSize = itemSearch.getPageSize();
175         itemSearch.setPageSize(-1); // temporarily switch off paging of results
176
ExcelUtils eu = new ExcelUtils(jtrac.findItems(itemSearch), itemSearch);
177         itemSearch.setPageSize(pageSize);
178         response.setContentType("application/unknow");
179         response.setHeader("Content-Disposition", "inline;filename=jtrac-export.xls");
180         ServletOutputStream JavaDoc out = response.getOutputStream();
181         Locale JavaDoc locale = RequestContextUtils.getLocale(request);
182         MessageSource messageSource = RequestContextUtils.getWebApplicationContext(request);
183         eu.exportToExcel(messageSource, locale).write(out);
184         out.flush();
185         return null;
186     }
187     
188 }
189
Popular Tags