Java tutorial
/** * Copyright (C) 2000 - 2013 Silverpeas * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * As a special exception to the terms and conditions of version 3.0 of the GPL, you may * redistribute this Program in connection with Free/Libre Open Source Software ("FLOSS") * applications as described in Silverpeas's FLOSS exception. You should have received a copy of the * text describing the FLOSS exception, and it is also available here: * "http://www.silverpeas.org/docs/core/legal/floss_exception.html" * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see <http://www.gnu.org/licenses/>. */ package com.stratelia.webactiv.agenda.servlets; import com.silverpeas.ical.ImportIcalManager; import com.silverpeas.ical.PasswordEncoder; import com.silverpeas.ical.StringUtils; import com.silverpeas.util.StringUtil; import org.silverpeas.servlet.FileUploadUtil; import com.stratelia.silverpeas.peasCore.ComponentContext; import com.stratelia.silverpeas.peasCore.MainSessionController; import com.stratelia.silverpeas.peasCore.servlets.ComponentRequestRouter; import com.stratelia.silverpeas.silvertrace.SilverTrace; import com.stratelia.webactiv.agenda.control.AgendaSessionController; import com.stratelia.webactiv.agenda.model.CalendarImportSettings; import com.stratelia.webactiv.beans.admin.UserDetail; import com.stratelia.webactiv.calendar.model.Attendee; import com.stratelia.webactiv.calendar.model.Category; import com.stratelia.webactiv.util.DateUtil; import com.stratelia.webactiv.util.FileRepositoryManager; import com.stratelia.webactiv.util.GeneralPropertiesManager; import org.apache.commons.fileupload.FileItem; import org.silverpeas.servlet.HttpRequest; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.StringTokenizer; /** * Class declaration * * @author */ public class AgendaRequestRouter extends ComponentRequestRouter<AgendaSessionController> { private static final long serialVersionUID = -3636409715447616873L; /** * Constructor declaration * * @see */ public AgendaRequestRouter() { } /** * Method declaration * * @param mainSessionCtrl * @param context * @return * @see */ public AgendaSessionController createComponentSessionController(MainSessionController mainSessionCtrl, ComponentContext context) { return new AgendaSessionController(mainSessionCtrl, context); } /** * This method has to be implemented in the component request router class. returns the session * control bean name to be put in the request object ex : for almanach, returns "almanach" */ public String getSessionControlBeanName() { return "agenda"; } /** * This method has to be implemented by the component request router it has to compute a * destination page * * * @param function The entering request function (ex : "Main.jsp") * @param scc The component Session Controller, build and initialised. * @param request The entering request. The request router need it to get parameters * @return The complete destination URL for a forward (ex : * "/almanach/jsp/almanach.jsp?flag=user") */ public String getDestination(String function, AgendaSessionController scc, HttpRequest request) { SilverTrace.info("agenda", "AgendaRequestRouter.getDestination()", "root.MSG_GEN_ENTER_METHOD"); String destination = ""; try { if (function.startsWith("Main") || function.startsWith(("agenda.jsp"))) { scc.viewByDay(); scc.setAgendaUserDetail(scc.getAgendaUserDetail()); setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("ViewByYear")) { scc.viewByYear(); scc.setAgendaUserDetail(scc.getAgendaUserDetail()); setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("ViewByMonth")) { scc.setAgendaUserDetail(scc.getAgendaUserDetail()); scc.viewByMonth(); setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("ViewByWeek")) { scc.setAgendaUserDetail(scc.getAgendaUserDetail()); scc.viewByWeek(); setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("NextYear")) { scc.setAgendaUserDetail(scc.getAgendaUserDetail()); scc.nextYear(); destination = getDestination("ToChooseWorkingDays", scc, request); } else if (function.startsWith("PreviousYear")) { scc.setAgendaUserDetail(scc.getAgendaUserDetail()); scc.previousYear(); destination = getDestination("ToChooseWorkingDays", scc, request); } else if (function.startsWith("ViewByDay")) { scc.setAgendaUserDetail(scc.getAgendaUserDetail()); scc.viewByDay(); setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("SelectDay")) { String day = request.getParameter("Day"); if (StringUtil.isDefined(day)) { Date date = DateUtil.stringToDate(day, scc.getLanguage()); if (!scc.isHolidayDate(date)) { scc.selectDay(day); } } setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("searchResult")) { destination = "/agenda/jsp/journal.jsp?Action=Update&JournalId=" + request.getParameter("Id"); } else if (function.startsWith("diffusion")) { destination = scc.initSelectionPeas(); } else if (function.startsWith("saveMembers")) { // retour du userPanel Collection<Attendee> attendees = scc.getUserSelected(); scc.setCurrentAttendees(attendees); destination = "/agenda/jsp/journal.jsp?Action=DiffusionListOK"; } else if (function.startsWith("ChooseOtherAgenda")) { destination = scc.initUserPanelOtherAgenda(); } else if (function.startsWith("ViewOtherAgenda")) { String id = request.getParameter("Id"); UserDetail selectedUser; if (id != null) { // permalink selectedUser = scc.getUserDetail(id); } else { // userPanel return selectedUser = scc.getSelectedUser(); } // request.setAttribute("userDetail",selectedUser); scc.setAgendaUserDetail(selectedUser); SilverTrace.info("agenda", "AgendaRequestRouter.getDestination()", "root.MSG_GEN_PARAM_VALUE", selectedUser.getDisplayedName()); setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("ViewCurrentAgenda")) { SilverTrace.info("agenda", "AgendaRequestRouter.getDestination()", "root.MSG_GEN_PARAM_VALUE", scc.getUserDetail().getDisplayedName()); UserDetail userDetail = scc.getUserDetail(); scc.setAgendaUserDetail(userDetail); setCommonAttributes(request, scc); destination = "/agenda/jsp/agenda.jsp"; } else if (function.startsWith("importCalendar")) { CalendarImportSettings importSettings = scc.getImportSettings(); if (importSettings != null) { request.setAttribute("ImportSettings", importSettings); } destination = "/agenda/jsp/importCalendar.jsp"; } else if (function.startsWith("ImportSettings")) { // get current imports settings for user CalendarImportSettings importSettings = scc.getImportSettings(); if (importSettings != null) { request.setAttribute("ImportSettings", importSettings); } destination = "/agenda/jsp/importSettings.jsp"; } else if (function.startsWith("saveImportSettings") || function.startsWith("updateImportSettings")) { // get updated imports settings for user CalendarImportSettings importSettings = new CalendarImportSettings(); importSettings.setUserId(Integer.parseInt(scc.getUserId())); importSettings.setHostName(request.getParameter("hostName")); importSettings.setSynchroDelay(Integer.parseInt(request.getParameter("synchroDelay"))); importSettings.setSynchroType(Integer.parseInt(request.getParameter("synchroType"))); // store settings if (function.startsWith("saveImportSettings")) { scc.saveUserSettings(importSettings); } else { scc.updateUserSettings(importSettings); } // reload main frame in order to reload hidden frame with import applet // destination = "/agenda/jsp/reloadMainFrame.jsp"; destination = "/agenda/jsp/agenda.jsp"; } else if (function.equals("ToExportIcal")) { destination = "/agenda/jsp/exportIcal.jsp"; } else if (function.equals("ToImportIcal")) { destination = "/agenda/jsp/importIcal.jsp"; } else if (function.equals("ExportIcal")) { String startDate = request.getParameter("StartDate"); String endDate = request.getParameter("EndDate"); String returnCode = scc.exportIcalAgenda(startDate, endDate); request.setAttribute("ExportReturnCode", returnCode); destination = getDestination("ToExportIcal", scc, request); } else if (function.equals("ImportIcal")) { ImportIcalManager.charset = scc.getSettings().getString("defaultCharset"); String returnCode = AgendaSessionController.IMPORT_FAILED; File fileUploaded = processFormUpload(scc, request); if (fileUploaded != null) { returnCode = scc.importIcalAgenda(fileUploaded); fileUploaded.delete(); } request.setAttribute("ImportReturnCode", returnCode); destination = getDestination("ToImportIcal", scc, request); } else if (function.equals("ToSynchroIcal")) { CalendarImportSettings importSettings = scc.getImportSettings(); String urlIcalendar = null; String loginIcalendar = null; String pwdIcalendar = null; String charset = null; if (importSettings != null) { urlIcalendar = importSettings.getUrlIcalendar(); loginIcalendar = importSettings.getLoginIcalendar(); if (StringUtil.isDefined(importSettings.getPwdIcalendar())) { pwdIcalendar = StringUtils.decodePassword(importSettings.getPwdIcalendar()); } charset = importSettings.getCharset(); } request.setAttribute("UrlIcalendar", urlIcalendar); request.setAttribute("LoginIcalendar", loginIcalendar); request.setAttribute("PwdIcalendar", pwdIcalendar); request.setAttribute("Charset", charset); destination = "/agenda/jsp/synchroIcal.jsp"; } else if (function.equals("SynchroIcal")) { ImportIcalManager.charset = scc.getSettings().getString("defaultCharset"); // get updated imports settings for user boolean newSettings = false; boolean authNeeded = false; CalendarImportSettings importSettings = scc.getImportSettings(); if (importSettings == null) { importSettings = new CalendarImportSettings(); newSettings = true; } String remoteUrlIcalendar = request.getParameter("UrlIcalendar"); String remoteLoginIcalendar = request.getParameter("LoginIcalendar"); String remotePwdIcalendar = request.getParameter("PwdIcalendar"); String charset = request.getParameter("Charset"); importSettings.setLoginIcalendar(remoteLoginIcalendar); remotePwdIcalendar = PasswordEncoder.encodePassword(remotePwdIcalendar); importSettings.setPwdIcalendar(remotePwdIcalendar); if (StringUtil.isDefined(remoteLoginIcalendar)) { authNeeded = true; } importSettings.setUrlIcalendar(remoteUrlIcalendar); importSettings.setUserId(Integer.parseInt(scc.getUserId())); importSettings.setHostName(""); if (StringUtil.isDefined(charset)) { importSettings.setCharset(charset); ImportIcalManager.charset = charset; } if (newSettings) { scc.saveUserSettings(importSettings); } else { scc.updateUserSettings(importSettings); } String returnCode; if (authNeeded) { returnCode = scc.synchroIcalAgenda(remoteUrlIcalendar, remoteLoginIcalendar, remotePwdIcalendar); } else { returnCode = scc.synchroIcalAgenda(remoteUrlIcalendar); } request.setAttribute("SynchroReturnCode", returnCode); destination = getDestination("ToSynchroIcal", scc, request); } else if (function.equals("ToChooseWorkingDays")) { scc.viewChooseDays(); Calendar calendar = Calendar.getInstance(); calendar.setTime(scc.getCurrentDay()); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.MONTH, 0); Date beginDate = calendar.getTime(); calendar.set(Calendar.DAY_OF_MONTH, 31); calendar.add(Calendar.MONTH, 11); Date endDate = calendar.getTime(); request.setAttribute("BeginDate", beginDate); request.setAttribute("EndDate", endDate); request.setAttribute("HolidayDates", scc.getHolidaysDates()); destination = "/agenda/jsp/chooseWorkingDays.jsp"; } else if (function.equals("ChangeDateStatus")) { String date = request.getParameter("Date"); String status = request.getParameter("Status"); scc.changeDateStatus(date, status); destination = getDestination("ToChooseWorkingDays", scc, request); } else if (function.equals("ChangeDayOfWeekStatus")) { String year = request.getParameter("Year"); String month = request.getParameter("Month"); String day = request.getParameter("DayOfWeek"); scc.changeDayOfWeekStatus(year, month, day); destination = getDestination("ToChooseWorkingDays", scc, request); } else if (function.equals("UpdateEvent")) { String journalId = request.getParameter("JournalId"); request.setAttribute("JournalId", journalId); destination = "/agenda/jsp/journal.jsp"; } else if (function.equals("ReallyEditCategories")) { String selectedCategories = request.getParameter("selectedCategories"); StringTokenizer st = new StringTokenizer(selectedCategories, ","); String[] categoryIds = new String[st.countTokens()]; Collection<Integer> selectedCategoryIds = new ArrayList<Integer>(); Collection<Category> categories = new ArrayList<Category>(); int i = 0; while (st.hasMoreTokens()) { String categIcal = st.nextToken(); categoryIds[i] = categIcal; selectedCategoryIds.add(Integer.valueOf(categoryIds[i])); Category categ = scc.getCategory(categoryIds[i]); categories.add(categ); i++; } scc.setCurrentCategories(categories); request.setAttribute("FromCategories", "1"); destination = "/agenda/jsp/journal.jsp?Action=CategoryOK"; } else { destination = "/agenda/jsp/" + function; } } catch (Exception exce_all) { request.setAttribute("javax.servlet.jsp.jspException", exce_all); return "/admin/jsp/errorpageMain.jsp"; } return destination; } private void setCommonAttributes(HttpServletRequest request, AgendaSessionController controller) { request.setAttribute("MyAgendaUrl", controller.getMyAgendaUrl()); request.setAttribute("RSSUrl", controller.getRSSUrl()); } private File processFormUpload(AgendaSessionController agendaSc, HttpServletRequest request) { String logicalName = ""; String tempFolderName = ""; String tempFolderPath = ""; String fileType = ""; long fileSize = 0; File fileUploaded = null; try { List<FileItem> items = HttpRequest.decorate(request).getFileItems(); FileItem fileItem = FileUploadUtil.getFile(items, "fileCalendar"); if (fileItem != null) { logicalName = fileItem.getName(); if (logicalName != null) { logicalName = logicalName.substring(logicalName.lastIndexOf(File.separator) + 1, logicalName.length()); // Name of temp folder: timestamp and userId tempFolderName = new Long(new Date().getTime()).toString() + "_" + agendaSc.getUserId(); // Mime type of the file fileType = fileItem.getContentType(); fileSize = fileItem.getSize(); // Directory Temp for the uploaded file tempFolderPath = FileRepositoryManager.getAbsolutePath(agendaSc.getComponentId()) + GeneralPropertiesManager.getString("RepositoryTypeTemp") + File.separator + tempFolderName; if (!new File(tempFolderPath).exists()) { FileRepositoryManager.createAbsolutePath(agendaSc.getComponentId(), GeneralPropertiesManager.getString("RepositoryTypeTemp") + File.separator + tempFolderName); } // Creation of the file in the temp folder fileUploaded = new File(FileRepositoryManager.getAbsolutePath(agendaSc.getComponentId()) + GeneralPropertiesManager.getString("RepositoryTypeTemp") + File.separator + tempFolderName + File.separator + logicalName); fileItem.write(fileUploaded); // Is a real file ? if (fileSize > 0) { SilverTrace.debug("agenda", "AgendaRequestRouter.processFormUpload()", "root.MSG_GEN_PARAM_VALUE", "fileUploaded = " + fileUploaded + " fileSize=" + fileSize + " fileType=" + fileType); } } } } catch (Exception e) { // Other exception SilverTrace.warn("agenda", "AgendaRequestRouter.processFormUpload()", "root.EX_LOAD_ATTACHMENT_FAILED", e); } return fileUploaded; } }