/** * ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium. */ package org.esupportail.helpdesk.domain.departmentManagerConfiguration; import org.esupportail.commons.exceptions.ConfigException; import org.esupportail.commons.utils.Assert; import org.esupportail.commons.utils.strings.StringUtils; import org.esupportail.helpdesk.domain.beans.DepartmentManager; import org.springframework.beans.factory.InitializingBean; /** * A basic implementation of DepartmentManagerConfigurator. */ public class DepartmentManagerConfiguratorImpl implements DepartmentManagerConfigurator, InitializingBean { /** * The serialization id. */ private static final long serialVersionUID = -6317690649012607580L; /** * The default rate. */ private static final int DEFAULT_RATE = 100; /** * True if new managers are available. */ private boolean available; /** * True if new managers can manage the FAQs. */ private boolean manageFaq; /** * True if new managers can refuse tickets. */ private boolean refuseTicket; /** * True if new managers can take already assigned tickets. */ private boolean takeAlreadyAssignedTicket; /** * True if new managers can take free tickets. */ private boolean takeFreeTicket; /** * True if new managers can assign already assigned tickets. */ private boolean assignTicket; /** * True if new managers can manage the managers. */ private boolean manageProperties; /** * True if new managers can manage the managers. */ private boolean manageManagers; /** * True if new managers can manage the categories. */ private boolean manageCategories; /** * True if new managers can change to change the department of a ticket. */ private boolean modifyTicketDepartment; /** * The rate for new managers. */ private int rate; /** * True if new managers can set their own availability. */ private Boolean setOwnAvailability; /** * True if new managers can reopen tickets they do not manage. */ private Boolean reopenAllTickets; /** A priority level for ticket monitoring. */ private Integer ticketMonitoringAny; /** A priority level for ticket monitoring. */ private Integer ticketMonitoringCategory; /** A priority level for ticket monitoring. */ private Integer ticketMonitoringManaged; /** * The report type. */ private String reportType; /** * The time of the first report sent. */ private Integer reportTime1; /** * The time of the second report sent. */ private Integer reportTime2; /** * True to send reports even on the week-end. */ private Boolean reportWeekend; /** * Bean constructor. */ public DepartmentManagerConfiguratorImpl() { super(); this.available = true; this.manageFaq = true; this.refuseTicket = true; this.takeAlreadyAssignedTicket = true; this.takeFreeTicket = true; this.assignTicket = true; this.manageProperties = true; this.manageManagers = true; this.manageCategories = true; this.modifyTicketDepartment = true; this.rate = DEFAULT_RATE; this.setOwnAvailability = true; this.reopenAllTickets = true; this.ticketMonitoringAny = null; this.ticketMonitoringCategory = null; this.ticketMonitoringManaged = null; reportType = null; reportTime1 = null; reportTime2 = null; } /** * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ @Override public void afterPropertiesSet() throws Exception { Integer [] allowedValues = new Integer[] { DepartmentManager.TICKET_MONITORING_ALWAYS, DepartmentManager.TICKET_MONITORING_CREATION, DepartmentManager.TICKET_MONITORING_NEVER, }; Assert.contains(allowedValues, "ticketMonitoringAny", ticketMonitoringAny); Assert.contains(allowedValues, "ticketMonitoringCategory", ticketMonitoringCategory); Assert.contains(allowedValues, "ticketMonitoringManaged", ticketMonitoringManaged); if (ticketMonitoringCategory > ticketMonitoringAny) { ticketMonitoringCategory = ticketMonitoringAny; } if (ticketMonitoringManaged > ticketMonitoringCategory) { ticketMonitoringManaged = ticketMonitoringCategory; } if (reportType != null && !DepartmentManager.REPORT_M.equals(reportType) && !DepartmentManager.REPORT_MC.equals(reportType) && !DepartmentManager.REPORT_MF.equals(reportType) && !DepartmentManager.REPORT_MCF.equals(reportType) && !DepartmentManager.REPORT_MFC.equals(reportType) && !DepartmentManager.REPORT_MCFO.equals(reportType) && !DepartmentManager.REPORT_MFCO.equals(reportType)) { throw new ConfigException( getClass() + ": invalid value for property reportType (" + reportType + ")"); } } /** * @see org.esupportail.helpdesk.domain.departmentManagerConfiguration.DepartmentManagerConfigurator * #configureTicketMonitoring( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void configureTicketMonitoring(final DepartmentManager departmentManager) { departmentManager.setTicketMonitoringAny(ticketMonitoringAny); departmentManager.setTicketMonitoringCategory(ticketMonitoringCategory); departmentManager.setTicketMonitoringManaged(ticketMonitoringManaged); } /** * @see org.esupportail.helpdesk.domain.departmentManagerConfiguration.DepartmentManagerConfigurator#configure( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void configure(final DepartmentManager departmentManager) { departmentManager.setAvailable(available); departmentManager.setManageFaq(manageFaq); departmentManager.setRefuseTicket(refuseTicket); departmentManager.setTakeAlreadyAssignedTicket(takeAlreadyAssignedTicket); departmentManager.setTakeFreeTicket(takeFreeTicket); departmentManager.setAssignTicket(assignTicket); departmentManager.setManageProperties(manageProperties); departmentManager.setManageManagers(manageManagers); departmentManager.setManageCategories(manageCategories); departmentManager.setModifyTicketDepartment(modifyTicketDepartment); departmentManager.setRate(rate); departmentManager.setSetOwnAvailability(setOwnAvailability); departmentManager.setReopenAllTickets(reopenAllTickets); departmentManager.setReportType(reportType); departmentManager.setReportTime1(reportTime1); departmentManager.setReportTime2(reportTime2); departmentManager.setReportWeekend(reportWeekend); configureTicketMonitoring(departmentManager); } /** * @param assignTicket the assignTicket to set */ public void setAssignTicket(final boolean assignTicket) { this.assignTicket = assignTicket; } /** * @param available the available to set */ public void setAvailable(final boolean available) { this.available = available; } /** * @param manageCategories the manageCategories to set */ public void setManageCategories(final boolean manageCategories) { this.manageCategories = manageCategories; } /** * @param manageFaq the manageFaq to set */ public void setManageFaq(final boolean manageFaq) { this.manageFaq = manageFaq; } /** * @param manageManagers the manageManagers to set */ public void setManageManagers(final boolean manageManagers) { this.manageManagers = manageManagers; } /** * @param modifyTicketDepartment the modifyTicketDepartment to set */ public void setModifyTicketDepartment(final boolean modifyTicketDepartment) { this.modifyTicketDepartment = modifyTicketDepartment; } /** * @param rate the rate to set */ public void setRate(final int rate) { this.rate = rate; } /** * @param refuseTicket the refuseTicket to set */ public void setRefuseTicket(final boolean refuseTicket) { this.refuseTicket = refuseTicket; } /** * @param reopenAllTickets the reopenAllTickets to set */ public void setReopenAllTickets(final Boolean reopenAllTickets) { this.reopenAllTickets = reopenAllTickets; } /** * @param setOwnAvailability the setOwnAvailability to set */ public void setSetOwnAvailability(final Boolean setOwnAvailability) { this.setOwnAvailability = setOwnAvailability; } /** * @param takeAlreadyAssignedTicket the takeAlreadyAssignedTicket to set */ public void setTakeAlreadyAssignedTicket(final boolean takeAlreadyAssignedTicket) { this.takeAlreadyAssignedTicket = takeAlreadyAssignedTicket; } /** * @param takeFreeTicket the takeFreeTicket to set */ public void setTakeFreeTicket(final boolean takeFreeTicket) { this.takeFreeTicket = takeFreeTicket; } /** * @param stringValue * @param propertyName * @return the int value that corresponds to a string. */ protected int getTicketMonitoringIntValue( final String stringValue, final String propertyName) { String [] allowedValues = new String [] { "always", "creation", "never", }; Assert.contains(allowedValues, propertyName, stringValue.toLowerCase()); if ("always".equalsIgnoreCase(stringValue.trim())) { return DepartmentManager.TICKET_MONITORING_ALWAYS; } if ("creation".equalsIgnoreCase(stringValue.trim())) { return DepartmentManager.TICKET_MONITORING_CREATION; } return DepartmentManager.TICKET_MONITORING_NEVER; } /** * @param ticketMonitoringAny the ticketMonitoringAny to set */ public void setTicketMonitoringAny(final String ticketMonitoringAny) { this.ticketMonitoringAny = getTicketMonitoringIntValue( ticketMonitoringAny, "ticketMonitoringAny"); } /** * @param ticketMonitoringCategory the ticketMonitoringCategory to set */ public void setTicketMonitoringCategory(final String ticketMonitoringCategory) { this.ticketMonitoringCategory = getTicketMonitoringIntValue( ticketMonitoringCategory, "ticketMonitoringCategory"); } /** * @param ticketMonitoringManaged the ticketMonitoringManaged to set */ public void setTicketMonitoringManaged(final String ticketMonitoringManaged) { this.ticketMonitoringManaged = getTicketMonitoringIntValue( ticketMonitoringManaged, "ticketMonitoringManaged"); } /** * @param manageProperties the manageProperties to set */ public void setManageProperties(final boolean manageProperties) { this.manageProperties = manageProperties; } /** * @return the reportType */ public String getReportType() { return reportType; } /** * @param reportType the reportType to set */ public void setReportType(final String reportType) { this.reportType = StringUtils.nullIfEmpty(reportType); } /** * @return the reportTime1 */ public Integer getReportTime1() { return reportTime1; } /** * @param reportTime1 the reportTime1 to set */ public void setReportTime1(final Integer reportTime1) { if (reportTime1 == null || reportTime1 == -1) { this.reportTime1 = null; } else { this.reportTime1 = reportTime1; } } /** * @return the reportTime2 */ public Integer getReportTime2() { return reportTime2; } /** * @param reportTime2 the reportTime2 to set */ public void setReportTime2(final Integer reportTime2) { if (reportTime2 == null || reportTime2 == -1) { this.reportTime2 = null; } else { this.reportTime2 = reportTime2; } } /** * @return the reportWeekend */ public Boolean getReportWeekend() { return reportWeekend; } /** * @param reportWeekend the reportWeekend to set */ public void setReportWeekend(final Boolean reportWeekend) { this.reportWeekend = reportWeekend; } }