package org.xdams.controller; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.support.RequestContextUtils; import org.springframework.web.util.WebUtils; import org.xdams.conf.master.ConfBean; import org.xdams.page.multiarchive.command.MultiQueryPageCommand; import org.xdams.page.multiarchive.command.MultiTitlePageCommand; import org.xdams.page.view.modeling.QueryPageView; import org.xdams.security.AuthenticationType; import org.xdams.security.UserDetails; import org.xdams.security.load.LoadUser; import org.xdams.security.load.LoadUserManager; import org.xdams.security.load.LoadUserSpeedUp; import org.xdams.user.access.ServiceUser; import org.xdams.user.bean.Archive; import org.xdams.user.bean.UserBean; import org.xdams.utility.resource.ConfManager; import org.xdams.workflow.bean.WorkFlowBean; import org.xdams.xml.builder.XMLBuilder; @Controller @SessionAttributes({ "userBean" }) @SuppressWarnings("unchecked") public class multiArchiveController { @Autowired ServiceUser serviceUser; @Autowired ServletContext servletContext; @Autowired AuthenticationType authenticationType; @Autowired ApplicationContext applicationContext; @Autowired Boolean multiAccount; @ModelAttribute public void workFlowBean(Model model) { model.addAttribute("workFlowBean", new WorkFlowBean()); } // @ModelAttribute public void userLoad(ModelMap model) { // System.out.println("xDamsController.userLoad() model.containsAttribute(\"userBean\"): " + model.containsAttribute("userBean")); if (!model.containsAttribute("userBean")) { UserDetails userDetails = null; try { userDetails = (UserDetails) ((SecurityContext) SecurityContextHolder.getContext()).getAuthentication().getPrincipal(); UserBean userBean = LoadUserManager.executeLoad(userDetails, authenticationType); model.addAttribute("userBean", userBean); } catch (Exception e) { } } } @ModelAttribute public void frontUrl(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception { // model.addAttribute("frontUrl", request.getContextPath() + "/resources"); userLoad(model); model.addAttribute("frontUrl", request.getContextPath() + "/resources"); // System.out.println("xDamsController.frontUrl() multiAccount: " + multiAccount); // System.out.println("xDamsController.frontUrl() model.get(\"userBean\"): " + model.get("userBean")); if (multiAccount && model.get("userBean") != null) { model.addAttribute("frontUrl", request.getContextPath() + "/resources/" + ((UserBean) model.get("userBean")).getAccountRef()); } // System.out.println("xDamsController.frontUrl() model.get(\"frontUrl\"): " + model.get("frontUrl")); model.addAttribute("contextPath", request.getContextPath()); String userAgent = ((HttpServletRequest) request).getHeader("User-Agent"); if (userAgent.toLowerCase().contains("msie")) { response.addHeader("X-UA-Compatible", "IE=edge"); } try { Locale locale = RequestContextUtils.getLocale(request); ((UserBean) model.get("userBean")).setLanguage(locale.getLanguage()); } catch (Exception e) { // TODO: handle exception } model.put("realPath", WebUtils.getRealPath(servletContext, "")); } public void common(ConfBean confBean, UserBean userBean, String archive, ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) throws Exception { WorkFlowBean workFlowBean = (WorkFlowBean) modelMap.get("workFlowBean"); // SETTO IL WORKFLOW PER LA NAVIGAZIONE DI xDams workFlowBean.setArchive(serviceUser.getArchive(userBean, archive)); workFlowBean.setRequest(request); workFlowBean.setResponse(response); workFlowBean.setApplicationContext(applicationContext); modelMap.put("workFlowBean", workFlowBean); } public void common(ConfBean confBean, UserBean userBean, String archive, String archiveLookup, ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) throws Exception { WorkFlowBean workFlowBean = (WorkFlowBean) modelMap.get("workFlowBean"); workFlowBean.setArchiveLookup(serviceUser.getArchive(userBean, archiveLookup)); common(confBean, userBean, archive, modelMap, request, response); } @RequestMapping(value = "/search/{archive}/query-multiarchive", method = RequestMethod.GET) public String queryPageMulti(@ModelAttribute("userBean") UserBean userBean, @ModelAttribute("confBean") ConfBean confBean, @PathVariable String archive, ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) throws Exception { common(confBean, userBean, archive, modelMap, request, response); Map<String, List<Archive>> usersArchives = new LinkedHashMap<String, List<Archive>>(); serviceUser.loadArchives(userBean, usersArchives); modelMap.addAttribute("usersArchives", usersArchives); MultiQueryPageCommand queryPageCommand = new MultiQueryPageCommand(request.getParameterMap(), modelMap); queryPageCommand.execute(); QueryPageView pageView = new QueryPageView(); WorkFlowBean workFlowBean = (WorkFlowBean) modelMap.get("workFlowBean"); pageView.generateView(workFlowBean, confBean, userBean, modelMap); modelMap.put("positionMap", pageView.getPositionMap()); modelMap.put("positionAdminMap", pageView.getPositionAdminMap()); modelMap.put("outputHourField", pageView.getOutputHourField()); modelMap.put("outputDataField", pageView.getOutputDataField()); modelMap.put("outputSortField", pageView.getOutputSortField()); return "multiArchive/search/query-multiarchive"; } @RequestMapping(value = "/search/{archive}/title-multiarchive") public String titlePage(@ModelAttribute("userBean") UserBean userBean, @ModelAttribute("confBean") ConfBean confBean, @PathVariable String archive, ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) throws Exception { common(confBean, userBean, archive, modelMap, request, response); MultiTitlePageCommand multiTitlePageCommand = new MultiTitlePageCommand(request.getParameterMap(), modelMap); multiTitlePageCommand.execute(); return "multiArchive/search/title-multiarchive"; } }