/** * ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium. */ package org.esupportail.helpdesk.domain; import java.net.InetAddress; import java.sql.Timestamp; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import org.esupportail.commons.aop.cache.RequestCache; import org.esupportail.commons.aop.monitor.Monitor; import org.esupportail.commons.exceptions.ConfigException; import org.esupportail.commons.exceptions.UserNotFoundException; import org.esupportail.commons.services.application.ApplicationService; import org.esupportail.commons.services.application.Version; import org.esupportail.commons.services.i18n.I18nService; import org.esupportail.commons.services.logging.Logger; import org.esupportail.commons.services.logging.LoggerImpl; import org.esupportail.commons.utils.Assert; import org.esupportail.commons.utils.FileUtils; import org.esupportail.helpdesk.dao.DaoService; import org.esupportail.helpdesk.domain.assignment.AssignmentAlgorithm; import org.esupportail.helpdesk.domain.assignment.AssignmentAlgorithmStore; import org.esupportail.helpdesk.domain.assignment.AssignmentResult; import org.esupportail.helpdesk.domain.beans.Action; import org.esupportail.helpdesk.domain.beans.Alert; import org.esupportail.helpdesk.domain.beans.ArchivedAction; import org.esupportail.helpdesk.domain.beans.ArchivedFileInfo; import org.esupportail.helpdesk.domain.beans.ArchivedInvitation; import org.esupportail.helpdesk.domain.beans.ArchivedTicket; import org.esupportail.helpdesk.domain.beans.Bookmark; import org.esupportail.helpdesk.domain.beans.Category; import org.esupportail.helpdesk.domain.beans.CategoryMember; import org.esupportail.helpdesk.domain.beans.Config; import org.esupportail.helpdesk.domain.beans.DeletedItem; import org.esupportail.helpdesk.domain.beans.Department; import org.esupportail.helpdesk.domain.beans.DepartmentInvitation; import org.esupportail.helpdesk.domain.beans.DepartmentManager; import org.esupportail.helpdesk.domain.beans.DepartmentSelectionConfig; import org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer; import org.esupportail.helpdesk.domain.beans.DeprecatedFaqEntry; import org.esupportail.helpdesk.domain.beans.Faq; import org.esupportail.helpdesk.domain.beans.FaqEvent; import org.esupportail.helpdesk.domain.beans.FaqLink; import org.esupportail.helpdesk.domain.beans.FileInfo; import org.esupportail.helpdesk.domain.beans.HistoryItem; import org.esupportail.helpdesk.domain.beans.Icon; import org.esupportail.helpdesk.domain.beans.Invitation; import org.esupportail.helpdesk.domain.beans.OldFaqEntry; import org.esupportail.helpdesk.domain.beans.OldFaqPart; import org.esupportail.helpdesk.domain.beans.OldFileInfo; import org.esupportail.helpdesk.domain.beans.OldTicketTemplate; import org.esupportail.helpdesk.domain.beans.Response; import org.esupportail.helpdesk.domain.beans.State; import org.esupportail.helpdesk.domain.beans.Ticket; import org.esupportail.helpdesk.domain.beans.TicketMonitoring; import org.esupportail.helpdesk.domain.beans.TicketView; import org.esupportail.helpdesk.domain.beans.User; import org.esupportail.helpdesk.domain.beans.VersionManager; import org.esupportail.helpdesk.domain.categoryConfiguration.CategoryConfigurator; import org.esupportail.helpdesk.domain.computerUrl.ComputerUrlBuilder; import org.esupportail.helpdesk.domain.computerUrl.ComputerUrlBuilderStore; import org.esupportail.helpdesk.domain.departmentConfiguration.DepartmentConfigurator; import org.esupportail.helpdesk.domain.departmentManagerConfiguration.DepartmentManagerConfigurator; import org.esupportail.helpdesk.domain.departmentSelection.DepartmentSelector; import org.esupportail.helpdesk.domain.reporting.FaqReporter; import org.esupportail.helpdesk.domain.reporting.InvitationSender; import org.esupportail.helpdesk.domain.reporting.MonitoringSender; import org.esupportail.helpdesk.domain.reporting.TicketPrinter; import org.esupportail.helpdesk.domain.reporting.TicketReporter; import org.esupportail.helpdesk.domain.userInfo.UserInfoProvider; import org.esupportail.helpdesk.domain.userManagement.UserStore; import org.esupportail.helpdesk.exceptions.ArchivedTicketNotFoundException; import org.esupportail.helpdesk.exceptions.CategoryMemberNotFoundException; import org.esupportail.helpdesk.exceptions.CategoryNotFoundException; import org.esupportail.helpdesk.exceptions.DepartmentManagerNotFoundException; import org.esupportail.helpdesk.exceptions.DepartmentNotFoundException; import org.esupportail.helpdesk.exceptions.FaqNotFoundException; import org.esupportail.helpdesk.exceptions.IconNotFoundException; import org.esupportail.helpdesk.exceptions.TicketNotFoundException; import org.esupportail.helpdesk.services.indexing.IndexIdProvider; import org.springframework.beans.factory.InitializingBean; /** * The basic implementation of DomainService. * * See /properties/domain/domain-example.xml */ @Monitor public class DomainServiceImpl implements DomainService, InitializingBean { /** * The serialization id. */ private static final long serialVersionUID = -839691561955400211L; /** * The default history max length. */ private static final int DEFAULT_HISTORY_MAX_LENGTH = 30; /** * The default min priority. */ private static final int DEFAULT_MIN_PRIORITY = 1; /** * The default max priority. */ private static final int DEFAULT_MAX_PRIORITY = 5; /** * A logger. */ private final Logger logger = new LoggerImpl(getClass()); /** * {@link DaoService}. */ private DaoService daoService; /** * {@link UserStore}. */ private UserStore userStore; /** * {@link I18nService}. */ private I18nService i18nService; /** * {@link ApplicationService}. */ private ApplicationService applicationService; /** * The index id provider. */ private IndexIdProvider indexIdProvider; /** * The min priority. */ private int minPriority = DEFAULT_MIN_PRIORITY; /** * The max priority. */ private int maxPriority = DEFAULT_MAX_PRIORITY; /** * The priorities. */ private List<Integer> priorities; /** * The origins. */ private List<String> origins; /** * The web origin. */ private String webOrigin; /** * The email origin. */ private String emailOrigin; /** * A bean to configure departments at their creation. */ private DepartmentConfigurator departmentConfigurator; /** * A bean to configure department managers at their creation. */ private DepartmentManagerConfigurator departmentManagerConfigurator; /** * A bean to configure categories at their creation. */ private CategoryConfigurator categoryConfigurator; /** * The default scope for tickets. */ private String departmentDefaultTicketScope = TicketScope.PUBLIC; /** * The default scope for FAQs. */ private String departmentDefaultFaqScope = FaqScope.ALL; /** * The default priority level for tickets. */ private int departmentDefaultTicketPriorityLevel = DEFAULT_PRIORITY_VALUE; /** * The user info provider. */ private UserInfoProvider userInfoProvider; /** * The department selector. */ private DepartmentSelector departmentSelector; /** * The assignment algorithm store. */ private AssignmentAlgorithmStore assignmentAlgorithmStore; /** * The default assignment algorithm name. */ private String defaultAssignmentAlgorithmName; /** * The computer url builder store. */ private ComputerUrlBuilderStore computerUrlBuilderStore; /** * The default computer url builder name. */ private String defaultComputerUrlBuilderName; /** * The default control panel refresh delay. */ private Integer defaultControlPanelRefreshDelay; /** * The max number of history items for a user.. */ private int historyMaxLength = DEFAULT_HISTORY_MAX_LENGTH; /** * The FCK editor code cleaner. */ private FckEditorCodeCleaner fckEditorCodeCleaner; /** * The ticket printer. */ private TicketPrinter ticketPrinter; /** * The invitation sender. */ private InvitationSender invitationSender; /** * The monitoring sender. */ private MonitoringSender monitoringSender; /** * The ticket reporter. */ private TicketReporter ticketReporter; /** * The FAQ reporter. */ private FaqReporter faqReporter; /** * Bean constructor. */ public DomainServiceImpl() { super(); } /** * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ @Override public void afterPropertiesSet() { Assert.notNull(this.daoService, "property daoService of class " + this.getClass().getName() + " can not be null"); Assert.notNull(this.userStore, "property userStore of class " + this.getClass().getName() + " can not be null"); Assert.notNull(this.i18nService, "property i18nService of class " + this.getClass().getName() + " can not be null"); Assert.notNull(this.applicationService, "property applicationService of class " + this.getClass().getName() + " can not be null"); Assert.notNull(indexIdProvider, "property indexIdProvider of class " + this.getClass().getName() + " can not be null"); Assert.notNull(departmentConfigurator, "property departmentConfigurator of class " + this.getClass().getName() + " can not be null"); Assert.notNull(departmentManagerConfigurator, "property departmentManagerConfigurator of class " + this.getClass().getName() + " can not be null"); Assert.notNull(categoryConfigurator, "property categoryConfigurator of class " + this.getClass().getName() + " can not be null"); Assert.notNull(departmentSelector, "property departmentSelector of class " + this.getClass().getName() + " can not be null"); Assert.contains( new String [] { TicketScope.PUBLIC, TicketScope.PRIVATE, TicketScope.SUBJECT_ONLY, }, "departmentDefaultTicketScope", departmentDefaultTicketScope); Assert.isTrue(maxPriority > minPriority, "maxPriority <= minPriority"); Assert.isTrue(minPriority > 0, "minPriority <= 0"); priorities = new ArrayList<Integer>(); for (int i = minPriority; i <= maxPriority; i++) { priorities.add(new Integer(i)); } Assert.contains( priorities, "departmentDefaultTicketPriorityLevel", new Integer(departmentDefaultTicketPriorityLevel)); Assert.notEmpty(origins, "property origins of class " + this.getClass().getName() + " can not be empty"); Assert.contains( origins, "webOrigin", webOrigin); Assert.contains( origins, "emailOrigin", emailOrigin); Assert.contains( new String [] { FaqScope.ALL, FaqScope.AUTHENTICATED, FaqScope.DEPARTMENT, FaqScope.MANAGER, }, "departmentDefaultFaqScope", departmentDefaultFaqScope); Assert.notNull(this.assignmentAlgorithmStore, "property assignmentAlgorithmStore of class " + this.getClass().getName() + " can not be null"); Assert.notEmpty(this.assignmentAlgorithmStore.getAlgorithmNames(), "property assignmentAlgorithmStore of class " + this.getClass().getName() + " can not be empty"); Assert.contains( assignmentAlgorithmStore.getAlgorithmNames(), "defaultAssignmentAlgorithName", defaultAssignmentAlgorithmName); Assert.notNull(this.computerUrlBuilderStore, "property computerUrlBuilderStore of class " + this.getClass().getName() + " can not be null"); Assert.notEmpty(this.computerUrlBuilderStore.getComputerUrlBuilderNames(), "property computerUrlBuilderStore of class " + this.getClass().getName() + " can not be empty"); Assert.contains( computerUrlBuilderStore.getComputerUrlBuilderNames(), "defaultComputerUrlBuilderName", defaultComputerUrlBuilderName); Assert.notNull(fckEditorCodeCleaner, "property fckEditorCodeCleaner of class " + this.getClass().getName() + " must be set"); if (userInfoProvider != null) { userInfoProvider.setDomainService(this); } Assert.notNull(this.ticketPrinter, "property ticketPrinter of class " + this.getClass().getName() + " can not be null"); ticketPrinter.setDomainService(this); Assert.notNull(this.invitationSender, "property invitationSender of class " + this.getClass().getName() + " can not be null"); invitationSender.setDomainService(this); Assert.notNull(this.monitoringSender, "property monitoringSender of class " + this.getClass().getName() + " can not be null"); monitoringSender.setDomainService(this); Assert.notNull(this.ticketReporter, "property ticketReporter of class " + this.getClass().getName() + " can not be null"); ticketReporter.setDomainService(this); Assert.notNull(this.faqReporter, "property faqReporter of class " + this.getClass().getName() + " can not be null"); faqReporter.setDomainService(this); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________PROPERTIES() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentDefaultTicketScope() */ @Override public String getDepartmentDefaultTicketScope() { return departmentDefaultTicketScope; } /** * @param departmentDefaultTicketScope the departmentDefaultTicketScope to set */ public void setDepartmentDefaultTicketScope(final String departmentDefaultTicketScope) { this.departmentDefaultTicketScope = departmentDefaultTicketScope; } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentDefaultTicketPriorityLevel() */ @Override public int getDepartmentDefaultTicketPriorityLevel() { return departmentDefaultTicketPriorityLevel; } /** * Set the departmentDefaultTicketPriorityLevel. * @param departmentDefaultTicketPriorityLevel */ public void setDepartmentDefaultTicketPriorityLevel(final int departmentDefaultTicketPriorityLevel) { this.departmentDefaultTicketPriorityLevel = departmentDefaultTicketPriorityLevel; } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentDefaultFaqScope() */ @Override public String getDepartmentDefaultFaqScope() { return departmentDefaultFaqScope; } /** * @param departmentDefaultFaqScope the departmentDefaultFaqScope to set */ public void setDepartmentDefaultFaqScope(final String departmentDefaultFaqScope) { this.departmentDefaultFaqScope = departmentDefaultFaqScope; } ////////////////////////////////////////////////////////////// // Priorities ////////////////////////////////////////////////////////////// /** * @return the minPriority */ protected int getMinPriority() { return minPriority; } /** * @param minPriority the minPriority to set */ public void setMinPriority(final int minPriority) { this.minPriority = minPriority; } /** * @return the maxPriority */ protected int getMaxPriority() { return maxPriority; } /** * @param maxPriority the maxPriority to set */ public void setMaxPriority(final int maxPriority) { this.maxPriority = maxPriority; } /** * @param priorities the priorities to set */ protected void setPriorities(final List<Integer> priorities) { this.priorities = priorities; } /** * @see org.esupportail.helpdesk.domain.DomainService#getPriorities() */ @Override public List<Integer> getPriorities() { return priorities; } ////////////////////////////////////////////////////////////// // Origin ////////////////////////////////////////////////////////////// /** * Set the origins. * @param originKeys */ public void setOriginKeys(final String originKeys) { this.origins = new ArrayList<String>(); for (String origin : originKeys.split(",")) { this.origins.add(origin); } } /** * @see org.esupportail.helpdesk.domain.DomainService#getOrigins() */ @Override public List<String> getOrigins() { return origins; } /** * @see org.esupportail.helpdesk.domain.DomainService#getWebOrigin() */ @Override public String getWebOrigin() { return webOrigin; } /** * @param webOrigin the webOrigin to set */ public void setWebOrigin(final String webOrigin) { this.webOrigin = webOrigin; } /** * @return the origin id for ticket fed by email. */ protected String getEmailOrigin() { return emailOrigin; } /** * @param emailOrigin the emailOrigin to set */ public void setEmailOrigin(final String emailOrigin) { this.emailOrigin = emailOrigin; } ////////////////////////////////////////////////////////////// // Misc ////////////////////////////////////////////////////////////// /** * @see org.esupportail.helpdesk.domain.DomainService#getAssignmentAlgorithmNames() */ @Override public List<String> getAssignmentAlgorithmNames() { return assignmentAlgorithmStore.getAlgorithmNames(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getAssignmentAlgorithmDescription( * java.lang.String, java.util.Locale) */ @Override public String getAssignmentAlgorithmDescription( final String name, final Locale locale) { AssignmentAlgorithm algorithm = assignmentAlgorithmStore.getAlgorithm(name); if (algorithm == null) { return null; } return algorithm.getDescription(locale); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDefaultAssignmentAlgorithmName() */ @Override public String getDefaultAssignmentAlgorithmName() { return defaultAssignmentAlgorithmName; } /** * @return the names of the computer url builders. */ @Override public List<String> getComputerUrlBuilderNames() { return computerUrlBuilderStore.getComputerUrlBuilderNames(); } /** * @param name * @param locale * @return the description of a computer url builder. */ @Override public String getComputerUrlBuilderDescription( final String name, final Locale locale) { ComputerUrlBuilder computerUrlBuilder = computerUrlBuilderStore.getComputerUrlBuilder(name); if (computerUrlBuilder == null) { return null; } return computerUrlBuilder.getDescription(locale); } /** * @return the default computer url builder name. */ @Override public String getDefaultComputerUrlBuilderName() { return defaultComputerUrlBuilderName; } /** * @return the useLdap */ @Override public boolean isUseLdap() { return getUserStore().isCasAuthAllowed(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________USER() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getUserStore() */ @Override public UserStore getUserStore() { return userStore; } /** * Update the department selection context time for a user. * @param user */ protected void updateUserDepartmentSelectionContextTime(final User user) { user.updateDepartmentSelectionContextTime(); updateUser(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#getUsers() */ @Override public List<User> getUsers() { return this.daoService.getUsers(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getUsersNumber() */ @Override public int getUsersNumber() { return this.daoService.getUsersNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getCasUsersNumber() */ @Override public int getCasUsersNumber() { return this.daoService.getCasUsersNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getShibbolethUsersNumber() */ @Override public int getShibbolethUsersNumber() { return this.daoService.getShibbolethUsersNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getApplicationUsersNumber() */ @Override public int getApplicationUsersNumber() { return this.daoService.getApplicationUsersNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateUser(org.esupportail.helpdesk.domain.beans.User) */ @Override public void updateUser(final User user) { if (user.getControlPanelManagerDepartmentFilter() == null) { user.setControlPanelCategoryFilter(null); } user.setStoredControlPanelOrder(user.getControlPanelOrder().toString()); this.daoService.updateUser(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#getAdmins() */ @Override @RequestCache public List<User> getAdmins() { return daoService.getAdmins(); } /** * @see org.esupportail.helpdesk.domain.DomainService#addAdmin(org.esupportail.helpdesk.domain.beans.User) */ @Override public void addAdmin( final User user) { user.setAdmin(true); user.updateDepartmentSelectionContextTime(); updateUser(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteAdmin(org.esupportail.helpdesk.domain.beans.User) */ @Override public void deleteAdmin( final User user) { user.setAdmin(false); user.updateDepartmentSelectionContextTime(); updateUser(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#testUserInfo() */ @Override public void testUserInfo() { if (userInfoProvider != null) { userInfoProvider.test(); } } /** * @see org.esupportail.helpdesk.domain.DomainService#getUserInfo( * org.esupportail.helpdesk.domain.beans.User, java.util.Locale) */ @Override @RequestCache public String getUserInfo(final User user, final Locale locale) { if (userInfoProvider == null) { return null; } return userInfoProvider.getInfo(user, locale); } /** * @param email * @return true if the given email is valid. */ protected boolean isEmail( final String email) { return email != null && email.contains("@"); } /** * @see org.esupportail.helpdesk.domain.DomainService#transformEntitiesCreatedWithEmail( * org.esupportail.helpdesk.domain.beans.User) */ @Override public void transformEntitiesCreatedWithEmail(final User user) { if (getUserStore().isApplicationUser(user)) { return; } List<String> emails = userStore.getUserEmails(user); if (emails == null) { return; } for (String email : emails) { if (!isEmail(email)) { logger.error("invalid email [" + email + "]"); continue; } try { User applicationUser = userStore.getExistingApplicationUser(email); List<Ticket> tickets = getOwnedTickets(applicationUser); int i = 0; for (Ticket ticket : tickets) { changeTicketOwner(null, ticket, user, null, ActionScope.DEFAULT, false); i++; } if (i != 0) { logger.info("changed the owner of " + i + " ticket(s) from [application/" + applicationUser.getRealId() + "] to [" + user.getAuthType() + "/" + user.getRealId() + "]"); } i = 0; for (Invitation invitation : daoService.getInvitations(applicationUser)) { removeInvitation(null, invitation, false); Ticket ticket = invitation.getTicket(); if (!isInvited(user, ticket)) { invite(null, ticket, user, null, ActionScope.DEFAULT, false); } i++; } if (i != 0) { logger.info("changed " + i + " invitations(s) from [" + applicationUser.getId() + "] to [" + user.getId() + "]"); } // TODO totally remove the application user! } catch (UserNotFoundException e) { continue; } } } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________DEPARTMENT() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartment(long) */ @Override @RequestCache public Department getDepartment(final long id) throws DepartmentNotFoundException { Department department = this.daoService.getDepartment(id); if (department == null) { throw new DepartmentNotFoundException("no department found with id [" + id + "]"); } return department; } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartments() */ @Override public List<Department> getDepartments() { return this.daoService.getDepartments(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentsNumber() */ @Override public int getDepartmentsNumber() { return daoService.getDepartmentsNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getRealDepartmentsNumber() */ @Override public int getRealDepartmentsNumber() { return daoService.getRealDepartmentsNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getVirtualDepartmentsNumber() */ @Override public int getVirtualDepartmentsNumber() { return daoService.getVirtualDepartmentsNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#addDepartment( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public void addDepartment( final Department department) { department.computeEffectiveDefaultTicketScope(getDepartmentDefaultTicketScope()); department.computeEffectiveDefaultFaqScope(getDepartmentDefaultFaqScope()); departmentConfigurator.configure(department); department.setOrder(daoService.getDepartmentsNumber()); this.daoService.addDepartment(department); updateDepartmentSelectionContextTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateDepartment( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public void updateDepartment( final Department department) { boolean effectiveDefaultTicketScopeChanged = department.computeEffectiveDefaultTicketScope( getDepartmentDefaultTicketScope()); boolean effectiveDefaultFaqScopeChanged = department.computeEffectiveDefaultFaqScope( getDepartmentDefaultFaqScope()); this.daoService.updateDepartment(department); if (effectiveDefaultTicketScopeChanged) { for (Category category : getRootCategories(department)) { if (category.computeEffectiveDefaultTicketScope(false)) { updateCategory(category); } } } if (effectiveDefaultFaqScopeChanged) { for (DeprecatedFaqContainer faqContainer : getRootFaqContainers(department)) { if (faqContainer.computeEffectiveScope(false)) { updateFaqContainer(faqContainer); } } for (Faq faq : getRootFaqs(department)) { if (faq.computeEffectiveScope(false)) { updateFaq(faq); } } } updateDepartmentSelectionContextTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteDepartment( * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.Department) */ @Override public void deleteDepartment( final Department department, final Department archivedTicketsNewDepartment) { if (archivedTicketsNewDepartment == null) { for (ArchivedTicket archivedTicket : daoService.getArchivedTickets(department)) { daoService.addDeletedItem(new DeletedItem(indexIdProvider.getIndexId(archivedTicket))); daoService.deleteArchivedTicket(archivedTicket); } } else { for (ArchivedTicket archivedTicket : daoService.getArchivedTickets(department)) { ArchivedAction archivedAction = ArchivedAction.changeDepartmentArchivedAction( archivedTicket, archivedTicketsNewDepartment); daoService.addArchivedAction(archivedAction); archivedTicket.setDepartment(archivedTicketsNewDepartment); daoService.updateArchivedTicket(archivedTicket); } } daoService.deleteDepartment(department); reorderDepartments(getDepartments()); } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentLabelUsed(java.lang.String) */ @Override public boolean isDepartmentLabelUsed(final String label) { return this.daoService.isDepartmentLabelUsed(label); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentUp( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public void moveDepartmentUp(final Department department) { Department previousDepartment = daoService.getDepartmentByOrder(department.getOrder() - 1); if (previousDepartment != null) { department.setOrder(department.getOrder() - 1); updateDepartment(department); previousDepartment.setOrder(previousDepartment.getOrder() + 1); updateDepartment(previousDepartment); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentDown( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public void moveDepartmentDown(final Department department) { Department nextDepartment = daoService.getDepartmentByOrder(department.getOrder() + 1); if (nextDepartment != null) { department.setOrder(department.getOrder() + 1); updateDepartment(department); nextDepartment.setOrder(nextDepartment.getOrder() - 1); updateDepartment(nextDepartment); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentFirst( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public void moveDepartmentFirst(final Department departmentToMove) { for (Department department : getDepartments()) { if (department.getOrder() < departmentToMove.getOrder()) { department.setOrder(department.getOrder() + 1); updateDepartment(department); } } departmentToMove.setOrder(0); updateDepartment(departmentToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentLast( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public void moveDepartmentLast(final Department departmentToMove) { List<Department> departments = getDepartments(); for (Department department : departments) { if (department.getOrder() > departmentToMove.getOrder()) { department.setOrder(department.getOrder() - 1); updateDepartment(department); } } departmentToMove.setOrder(departments.size() - 1); updateDepartment(departmentToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#reorderDepartments(java.util.List) */ @Override public void reorderDepartments( final List<Department> departments) { int i = 0; for (Department department : departments) { if (department.getOrder() != i) { department.setOrder(i); daoService.updateDepartment(department); } i++; } updateDepartmentSelectionContextTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getVirtualDepartments( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<Department> getVirtualDepartments(final Department department) { return daoService.getVirtualDepartments(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasVirtualDepartments( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public boolean hasVirtualDepartments(final Department department) { return daoService.getVirtualDepartmentsNumber(department) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketCreationDepartments( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress) */ @Override public List<Department> getTicketCreationDepartments( final User user, final InetAddress client) { return departmentSelector.getTicketCreationDepartments(this, user, client); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketViewDepartments( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress) */ @Override public List<Department> getTicketViewDepartments( final User user, final InetAddress client) { return departmentSelector.getTicketViewDepartments(this, user, client); } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqViewDepartments( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress) */ @Override public List<Department> getFaqViewDepartments( final User user, final InetAddress client) { return departmentSelector.getFaqViewDepartments(this, user, client); } /** * @see org.esupportail.helpdesk.domain.DomainService#getEnabledDepartments() */ @Override public List<Department> getEnabledDepartments() { return daoService.getEnabledDepartments(); } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentVisibleForTicketCreation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department, * java.net.InetAddress) */ @Override @RequestCache public boolean isDepartmentVisibleForTicketCreation( final User user, final Department department, final InetAddress client) { return getTicketCreationDepartments(user, client).contains(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentVisibleForTicketView( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department, * java.net.InetAddress) */ @Override @RequestCache public boolean isDepartmentVisibleForTicketView( final User user, final Department department, final InetAddress client) { return getTicketViewDepartments(user, client).contains(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentVisibleForFaqView( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department, * java.net.InetAddress) */ @Override @RequestCache public boolean isDepartmentVisibleForFaqView( final User user, final Department department, final InetAddress client) { return getFaqViewDepartments(user, client).contains(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getManagedOrTicketViewVisibleDepartments( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress) */ @Override @RequestCache public List<Department> getManagedOrTicketViewVisibleDepartments( final User user, final InetAddress client) { List<Department> result = getManagedDepartments(user); for (Department department : getTicketViewDepartments(user, client)) { if (!result.contains(department)) { result.add(department); } } return result; } /** * @see org.esupportail.helpdesk.domain.DomainService#getSearchVisibleDepartments( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress) */ @Override @RequestCache public List<Department> getSearchVisibleDepartments( final User user, final InetAddress client) { List<Department> result = getManagedDepartments(user); for (Department department : getTicketViewDepartments(user, client)) { if (!result.contains(department)) { result.add(department); } } for (Department department : getFaqViewDepartments(user, client)) { if (!result.contains(department)) { result.add(department); } } return result; } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentVisibleForSearch( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department, * java.net.InetAddress) */ @Override @RequestCache public boolean isDepartmentVisibleForSearch( final User user, final Department department, final InetAddress client) { return getSearchVisibleDepartments(user, client).contains(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentsByFilter(java.lang.String) */ @Override public List<Department> getDepartmentsByFilter( final String filter) { return daoService.getDepartmentsByFilter(filter); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentByLabel(java.lang.String) */ @Override public Department getDepartmentByLabel( final String label) { return daoService.getDepartmentByLabel(label); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentEffectiveAssignmentAlgorithmName( * org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public String getDepartmentEffectiveAssignmentAlgorithmName( final Department department) { if (department.getAssignmentAlgorithmName() != null) { return department.getAssignmentAlgorithmName(); } return getDefaultAssignmentAlgorithmName(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________DEPARTMENT_MANAGER() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentManager( * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public DepartmentManager getDepartmentManager( final Department department, final User user) throws DepartmentManagerNotFoundException { DepartmentManager manager = daoService.getDepartmentManager(department, user); if (manager == null) { throw new DepartmentManagerNotFoundException("user [" + user.getRealId() + "] is not a manager of department [" + department.getLabel() + "]"); } return manager; } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentManager( * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean isDepartmentManager( final Department department, final User user) { if (user == null) { return false; } try { getDepartmentManager(department, user); return true; } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentManagers( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<DepartmentManager> getDepartmentManagers( final Department department) { return this.daoService.getDepartmentManagers(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentManagers( * org.esupportail.helpdesk.domain.beans.User) */ @Override public List<DepartmentManager> getDepartmentManagers( final User user) { return this.daoService.getDepartmentManagers(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#getManagerUsersNumber() */ @Override @RequestCache public int getManagerUsersNumber() { List<User> users = new ArrayList<User>(); for (DepartmentManager manager : daoService.getDepartmentManagers()) { if (!users.contains(manager.getUser())) { users.add(manager.getUser()); } } return users.size(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getAvailableDepartmentManagers( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<DepartmentManager> getAvailableDepartmentManagers( final Department department) { return this.daoService.getAvailableDepartmentManagers(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#addDepartmentManager( * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.User) */ @Override public DepartmentManager addDepartmentManager( final Department department, final User user) { DepartmentManager departmentManager = new DepartmentManager(); departmentManager.setDepartment(department); departmentManager.setUser(user); departmentManager.setOrder(daoService.getDepartmentManagersNumber(department)); departmentManagerConfigurator.configure(departmentManager); departmentManager.checkTicketMonitoringValues(); this.daoService.addDepartmentManager(departmentManager); updateUserDepartmentSelectionContextTime(user); return departmentManager; } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteDepartmentManager( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.DepartmentManager, * boolean, org.esupportail.helpdesk.domain.beans.User) */ @Override public void deleteDepartmentManager( final User author, final DepartmentManager departmentManager, final boolean useAssignmentAlgorithm, final User newManager) { User oldManager = departmentManager.getUser(); for (Ticket ticket : getOpenManagedTickets( departmentManager.getDepartment(), oldManager)) { if (useAssignmentAlgorithm) { callAssignmentAlgorithm(ticket, oldManager, true, true); } else if (newManager != null) { assignTicket( author, ticket, newManager, null, ActionScope.DEFAULT); } else { freeTicket(author, ticket, null, ActionScope.DEFAULT); } } for (CategoryMember categoryMember : daoService.getCategoryMembers(departmentManager)) { deleteCategoryMember(categoryMember); } this.daoService.deleteDepartmentManager(departmentManager); updateUserDepartmentSelectionContextTime(oldManager); if (!oldManager.getControlPanelUserInterface() && !isDepartmentManager(oldManager)) { oldManager.setControlPanelUserInterface(false); updateUser(oldManager); } reorderDepartmentManagers(getDepartmentManagers(departmentManager.getDepartment())); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateDepartmentManager( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void updateDepartmentManager( final DepartmentManager departmentManager) { departmentManager.checkTicketMonitoringValues(); this.daoService.updateDepartmentManager(departmentManager); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentManagerUp( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void moveDepartmentManagerUp(final DepartmentManager departmentManager) { DepartmentManager previousDepartmentManager = daoService.getDepartmentManagerByOrder( departmentManager.getDepartment(), departmentManager.getOrder() - 1); if (previousDepartmentManager != null) { departmentManager.setOrder(departmentManager.getOrder() - 1); updateDepartmentManager(departmentManager); previousDepartmentManager.setOrder(previousDepartmentManager.getOrder() + 1); updateDepartmentManager(previousDepartmentManager); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentManagerDown( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void moveDepartmentManagerDown(final DepartmentManager departmentManager) { DepartmentManager nextDepartmentManager = daoService.getDepartmentManagerByOrder( departmentManager.getDepartment(), departmentManager.getOrder() + 1); if (nextDepartmentManager != null) { departmentManager.setOrder(departmentManager.getOrder() + 1); updateDepartmentManager(departmentManager); nextDepartmentManager.setOrder(nextDepartmentManager.getOrder() - 1); updateDepartmentManager(nextDepartmentManager); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentManagerFirst( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void moveDepartmentManagerFirst(final DepartmentManager departmentManagerToMove) { for (DepartmentManager departmentManager : getDepartmentManagers( departmentManagerToMove.getDepartment())) { if (departmentManager.getOrder() < departmentManagerToMove.getOrder()) { departmentManager.setOrder(departmentManager.getOrder() + 1); updateDepartmentManager(departmentManager); } } departmentManagerToMove.setOrder(0); updateDepartmentManager(departmentManagerToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveDepartmentManagerLast( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void moveDepartmentManagerLast(final DepartmentManager departmentManagerToMove) { List<DepartmentManager> departmentManagers = getDepartmentManagers( departmentManagerToMove.getDepartment()); for (DepartmentManager departmentManager : departmentManagers) { if (departmentManager.getOrder() > departmentManagerToMove.getOrder()) { departmentManager.setOrder(departmentManager.getOrder() - 1); updateDepartmentManager(departmentManager); } } departmentManagerToMove.setOrder(departmentManagers.size() - 1); updateDepartmentManager(departmentManagerToMove); } /** * @param user * @return the departments the user is manager of. */ protected List<Department> getManagedDepartmentsInternal(final User user) { List<DepartmentManager> managers = daoService.getDepartmentManagers(user); List<Department> departments = new ArrayList<Department>(); for (DepartmentManager manager : managers) { departments.add(manager.getDepartment()); } return departments; } /** * @see org.esupportail.helpdesk.domain.DomainService#getManagedDepartments( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public List<Department> getManagedDepartments(final User user) { if (user == null) { return new ArrayList<Department>(); } return getManagedDepartmentsInternal(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#getManagedDepartmentsOrAllIfAdmin( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public List<Department> getManagedDepartmentsOrAllIfAdmin(final User user) { if (user == null) { return new ArrayList<Department>(); } if (user.getAdmin()) { return getDepartments(); } return getManagedDepartmentsInternal(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentManager( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean isDepartmentManager(final User user) { List<DepartmentManager> managers = daoService.getDepartmentManagers(user); return !managers.isEmpty(); } /** * @see org.esupportail.helpdesk.domain.DomainService#reorderDepartmentManagers(java.util.List) */ @Override public void reorderDepartmentManagers( final List<DepartmentManager> managers) { int i = 0; for (DepartmentManager departmentManager : managers) { if (departmentManager.getOrder() != i) { departmentManager.setOrder(i); daoService.updateDepartmentManager(departmentManager); } i++; } } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________CATEGORY() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategory(long) */ @Override @RequestCache public Category getCategory(final long id) throws CategoryNotFoundException { Category category = this.daoService.getCategory(id); if (category == null) { throw new CategoryNotFoundException("no category found with id [" + id + "]"); } return category; } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategories( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<Category> getCategories(final Department department) { return this.daoService.getCategories(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategories() */ @Override public List<Category> getCategories() { return this.daoService.getCategories(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getRootCategoriesMap() */ @Override @RequestCache public Map<Department, List<Category>> getRootCategoriesMap() { Map<Department, List<Category>> result = new HashMap<Department, List<Category>>(); for (Category category : daoService.getCategories()) { if (category.getParent() == null) { Department department = category.getDepartment(); List<Category> rootCategories = result.get(department); if (rootCategories == null) { rootCategories = new ArrayList<Category>(); result.put(department, rootCategories); } rootCategories.add(category); } } return result; } /** * @see org.esupportail.helpdesk.domain.DomainService#getSubCategoriesMap() */ @Override @RequestCache public Map<Category, List<Category>> getSubCategoriesMap() { Map<Category, List<Category>> result = new HashMap<Category, List<Category>>(); for (Category category : daoService.getCategories()) { Category parent = category.getParent(); if (parent != null) { List<Category> subCategories = result.get(parent); if (subCategories == null) { subCategories = new ArrayList<Category>(); result.put(parent, subCategories); } subCategories.add(category); } } return result; } /** * @see org.esupportail.helpdesk.domain.DomainService#addCategory( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public void addCategory(final Category category) { category.computeEffectiveDefaultTicketScope(true); categoryConfigurator.configure(category); if (category.getParent() == null) { category.setOrder(daoService.getRootCategoriesNumber(category.getDepartment())); } else { category.setOrder(daoService.getSubCategoriesNumber(category.getParent())); } this.daoService.addCategory(category); } /** * Update the scope of the children of a category if needed. * @param category */ protected void updateCategoryChildrenScope(final Category category) { daoService.updateTicketsEffectiveScope(category); for (Category subCategory : getSubCategories(category)) { if (subCategory.computeEffectiveDefaultTicketScope(true)) { daoService.updateCategory(subCategory); updateCategoryChildrenScope(subCategory); } } } /** * @see org.esupportail.helpdesk.domain.DomainService#updateCategory( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public void updateCategory(final Category category) { boolean effectiveScopeChanged = category.computeEffectiveDefaultTicketScope(true); daoService.updateCategory(category); if (effectiveScopeChanged) { updateCategoryChildrenScope(category); } } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteCategory( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public void deleteCategory(final Category category) { this.daoService.deleteCategory(category); if (category.getParent() == null) { reorderCategories(daoService.getRootCategories(category.getDepartment())); } else { reorderCategories(daoService.getSubCategories(category.getParent())); } } /** * @see org.esupportail.helpdesk.domain.DomainService#getRootCategories( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<Category> getRootCategories(final Department department) { return daoService.getRootCategories(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasRootCategories( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public boolean hasRootCategories(final Department department) { return daoService.getRootCategoriesNumber(department) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#getSubCategories( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public List<Category> getSubCategories(final Category category) { return this.daoService.getSubCategories(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasSubCategories( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public boolean hasSubCategories(final Category category) { return daoService.getSubCategoriesNumber(category) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryUp( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public void moveCategoryUp(final Category category) { Category previousCategory = daoService.getCategoryByOrder( category.getDepartment(), category.getParent(), category.getOrder() - 1); if (previousCategory != null) { category.setOrder(category.getOrder() - 1); updateCategory(category); previousCategory.setOrder(previousCategory.getOrder() + 1); updateCategory(previousCategory); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryDown( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public void moveCategoryDown(final Category category) { Category nextCategory = daoService.getCategoryByOrder( category.getDepartment(), category.getParent(), category.getOrder() + 1); if (nextCategory != null) { category.setOrder(category.getOrder() + 1); updateCategory(category); nextCategory.setOrder(nextCategory.getOrder() - 1); updateCategory(nextCategory); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryFirst( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public void moveCategoryFirst(final Category categoryToMove) { List<Category> categories; if (categoryToMove.getParent() == null) { categories = getRootCategories(categoryToMove.getDepartment()); } else { categories = getSubCategories(categoryToMove.getParent()); } for (Category category : categories) { if (category.getOrder() < categoryToMove.getOrder()) { category.setOrder(category.getOrder() + 1); updateCategory(category); } } categoryToMove.setOrder(0); updateCategory(categoryToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryLast( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public void moveCategoryLast(final Category categoryToMove) { List<Category> categories; if (categoryToMove.getParent() == null) { categories = getRootCategories(categoryToMove.getDepartment()); } else { categories = getSubCategories(categoryToMove.getParent()); } for (Category category : categories) { if (category.getOrder() > categoryToMove.getOrder()) { category.setOrder(category.getOrder() - 1); updateCategory(category); } } categoryToMove.setOrder(categories.size() - 1); updateCategory(categoryToMove); } /** * Reorder a list of categories. * @param categories */ @Override public void reorderCategories(final List<Category> categories) { int i = 0; for (Category category : categories) { if (category.getOrder() != i) { category.setOrder(i); daoService.updateCategory(category); } i++; } } /** * Change the department of the tickets of a category. * @param category */ protected void changeTicketsDepartment( final Category category) { for (Ticket ticket : getTickets(category)) { moveTicket(ticket, category); } } /** * Remove the members of a category that are not managers of the department * (used when moving a category from one deparment to another one). * @param category */ protected void removeNonManagerMembers( final Category category) { for (CategoryMember categoryMember : getCategoryMembers(category)) { if (!isDepartmentManager(category.getDepartment(), categoryMember.getUser())) { deleteCategoryMember(categoryMember); } } reorderCategoryMembers(getCategoryMembers(category)); } /** * Change the department of a category. * @param category * @param targetDepartment */ protected void changeDepartmentRec( final Category category, final Department targetDepartment) { category.setDepartment(targetDepartment); updateCategory(category); removeNonManagerMembers(category); changeTicketsDepartment(category); for (Category subCategory : getSubCategories(category)) { changeDepartmentRec(subCategory, targetDepartment); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategory( * org.esupportail.helpdesk.domain.beans.Category, * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.Category) */ @Override public void moveCategory( final Category categoryToUpdate, final Department targetDepartment, final Category targetCategory) { Department oldDepartment = categoryToUpdate.getDepartment(); Category oldParent = categoryToUpdate.getParent(); boolean parentChanged; if (!oldDepartment.equals(targetDepartment)) { parentChanged = true; } else if (oldParent == null && targetCategory == null) { parentChanged = false; } else if (oldParent == null || targetCategory == null) { parentChanged = true; } else { parentChanged = !oldParent.equals(targetCategory); } if (parentChanged) { if (targetCategory == null) { categoryToUpdate.setOrder(daoService.getRootCategoriesNumber(targetDepartment)); } else { categoryToUpdate.setOrder(daoService.getSubCategoriesNumber(targetCategory)); } categoryToUpdate.setDepartment(targetDepartment); categoryToUpdate.setParent(targetCategory); updateCategory(categoryToUpdate); removeNonManagerMembers(categoryToUpdate); if (targetCategory == null) { reorderCategories(getRootCategories(targetDepartment)); } else { reorderCategories(getSubCategories(targetCategory)); } if (oldParent == null) { reorderCategories(getRootCategories(oldDepartment)); } else { reorderCategories(getSubCategories(oldParent)); } } else { moveCategoryLast(categoryToUpdate); } if (!oldDepartment.equals(targetDepartment)) { changeTicketsDepartment(categoryToUpdate); for (Category subCategory : getSubCategories(categoryToUpdate)) { changeDepartmentRec(subCategory, targetDepartment); } } } /** * @see org.esupportail.helpdesk.domain.DomainService#getVirtualCategories( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public List<Category> getVirtualCategories(final Category category) { return daoService.getVirtualCategories(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasVirtualCategories( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public boolean hasVirtualCategories(final Category category) { return daoService.getVirtualCategoriesNumber(category) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategoryEffectiveAssignmentAlgorithmName( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @RequestCache public String getCategoryEffectiveAssignmentAlgorithmName( final Category category) { if (category.getAssignmentAlgorithmName() != null) { return category.getAssignmentAlgorithmName(); } return getCategoryDefaultAssignmentAlgorithmName(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategoryDefaultAssignmentAlgorithmName( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @RequestCache public String getCategoryDefaultAssignmentAlgorithmName( final Category category) { if (category.getParent() == null) { return getDepartmentEffectiveAssignmentAlgorithmName( category.getDepartment()); } return getCategoryEffectiveAssignmentAlgorithmName( category.getParent()); } /** * @see org.esupportail.helpdesk.domain.DomainService#detectRedirectionLoop( * org.esupportail.helpdesk.domain.beans.Category, org.esupportail.helpdesk.domain.beans.Category, * java.util.Map) */ @Override @RequestCache public boolean detectRedirectionLoop( final Category category, final Category targetCategory, final Map<Category, Boolean> map) { Map<Category, Boolean> theMap = map; if (theMap == null) { theMap = new HashMap<Category, Boolean>(); } if (theMap.get(targetCategory) != null) { return theMap.get(targetCategory); } boolean loop = false; if (category.equals(targetCategory)) { loop = true; } else if (targetCategory.isVirtual()) { loop = detectRedirectionLoop(category, targetCategory.getRealCategory(), theMap); } else { for (Category subCategory : getSubCategories(targetCategory)) { if (detectRedirectionLoop(category, subCategory, theMap)) { loop = true; break; } } } theMap.put(targetCategory, loop); return loop; } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategoriesNumber() */ @Override public int getCategoriesNumber() { return daoService.getCategoriesNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getRealCategoriesNumber() */ @Override public int getRealCategoriesNumber() { return daoService.getRealCategoriesNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getVirtualCategoriesNumber() */ @Override public int getVirtualCategoriesNumber() { return daoService.getVirtualCategoriesNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTargetCategories( * org.esupportail.helpdesk.domain.beans.User) */ @Override public List<Category> getTargetCategories(final User author) { return daoService.getTargetCategories(author); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________CATEGORY_MEMBER() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategoryMember( * org.esupportail.helpdesk.domain.beans.Category, org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public CategoryMember getCategoryMember( final Category category, final User user) throws CategoryMemberNotFoundException { CategoryMember member = daoService.getCategoryMember(category, user); if (member == null) { throw new CategoryMemberNotFoundException("user [" + user.getRealId() + "] is not a member of category [" + category.getLabel() + "]"); } return member; } /** * @see org.esupportail.helpdesk.domain.DomainService#isCategoryMember( * org.esupportail.helpdesk.domain.beans.Category, org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean isCategoryMember( final Category category, final User user) { try { getCategoryMember(category, user); return true; } catch (CategoryMemberNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategoryMembers( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public List<CategoryMember> getCategoryMembers( final Category category) { return this.daoService.getCategoryMembers(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#getCategoryMembersMap() */ @Override @RequestCache public Map<Category, List<CategoryMember>> getCategoryMembersMap() { Map<Category, List<CategoryMember>> result = new HashMap<Category, List<CategoryMember>>(); for (CategoryMember categoryMember : daoService.getCategoryMembers()) { Category category = categoryMember.getCategory(); List<CategoryMember> categoryMembers = result.get(category); if (categoryMembers == null) { categoryMembers = new ArrayList<CategoryMember>(); result.put(category, categoryMembers); } categoryMembers.add(categoryMember); } return result; } /** * @see org.esupportail.helpdesk.domain.DomainService#addCategoryMember( * org.esupportail.helpdesk.domain.beans.Category, org.esupportail.helpdesk.domain.beans.User) */ @Override public CategoryMember addCategoryMember( final Category category, final User user) { CategoryMember categoryMember = new CategoryMember(); categoryMember.setCategory(category); categoryMember.setUser(user); categoryMember.setOrder(daoService.getCategoryMembersNumber(category)); this.daoService.addCategoryMember(categoryMember); return categoryMember; } /** * Reassign the opened tickets managed by a category member to be deleted. * @param author * @param category * @param user * @param useAssignmentAlgorithm true to use the assignment algorithm, ignored if reassignTickets is false * @param newManager the new manager for the tickets (null to free the tickets, ignored * if reassignTicket is false or useAssignmentAlgorithm is true */ protected void reassignTickets( final User author, final Category category, final User user, final boolean useAssignmentAlgorithm, final User newManager) { for (Ticket ticket : getOpenManagedTickets(category, user)) { if (useAssignmentAlgorithm) { callAssignmentAlgorithm(ticket, ticket.getManager(), true, true); } else if (newManager != null) { assignTicket( author, ticket, newManager, null, ActionScope.DEFAULT); } else { freeTicket(author, ticket, null, ActionScope.DEFAULT); } } for (Category subCategory : getSubCategories(category)) { if (subCategory.getInheritMembers()) { reassignTickets(author, subCategory, user, useAssignmentAlgorithm, newManager); } } } /** * Delete a category member and reassign the opened tickets managed. * @param categoryMember * @param reassignTickets true to ressign the opened tickets managed by the user, * false to let the user manage them aven if (s)he is not a member of the category anymore) * @param useAssignmentAlgorithm true to use the assignment algorithm, ignored if reassignTickets is false * @param newManager the new manager for the tickets (null to free the tickets, ignored * if reassignTicket is false or useAssignmentAlgorithm is true */ protected void deleteCategoryMember( final CategoryMember categoryMember, final boolean reassignTickets, final boolean useAssignmentAlgorithm, final User newManager) { if (reassignTickets) { reassignTickets( null, categoryMember.getCategory(), categoryMember.getUser(), useAssignmentAlgorithm, newManager); } daoService.deleteCategoryMember(categoryMember); reorderCategoryMembers(daoService.getCategoryMembers(categoryMember.getCategory())); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteCategoryMember( * org.esupportail.helpdesk.domain.beans.CategoryMember, boolean, org.esupportail.helpdesk.domain.beans.User) */ @Override public void deleteCategoryMember( final CategoryMember categoryMember, final boolean useAssignmentAlgorithm, final User newManager) { deleteCategoryMember(categoryMember, true, useAssignmentAlgorithm, newManager); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteCategoryMember( * org.esupportail.helpdesk.domain.beans.CategoryMember) */ @Override public void deleteCategoryMember( final CategoryMember categoryMember) { deleteCategoryMember(categoryMember, false, false, null); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateCategoryMember( * org.esupportail.helpdesk.domain.beans.CategoryMember) */ @Override public void updateCategoryMember( final CategoryMember categoryMember) { daoService.updateCategoryMember(categoryMember); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryMemberUp( * org.esupportail.helpdesk.domain.beans.CategoryMember) */ @Override public void moveCategoryMemberUp(final CategoryMember categoryMember) { CategoryMember previousCategoryMember = daoService.getCategoryMemberByOrder( categoryMember.getCategory(), categoryMember.getOrder() - 1); if (previousCategoryMember != null) { categoryMember.setOrder(categoryMember.getOrder() - 1); updateCategoryMember(categoryMember); previousCategoryMember.setOrder(previousCategoryMember.getOrder() + 1); updateCategoryMember(previousCategoryMember); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryMemberDown( * org.esupportail.helpdesk.domain.beans.CategoryMember) */ @Override public void moveCategoryMemberDown(final CategoryMember categoryMember) { CategoryMember nextCategoryMember = daoService.getCategoryMemberByOrder( categoryMember.getCategory(), categoryMember.getOrder() + 1); if (nextCategoryMember != null) { categoryMember.setOrder(categoryMember.getOrder() + 1); updateCategoryMember(categoryMember); nextCategoryMember.setOrder(nextCategoryMember.getOrder() - 1); updateCategoryMember(nextCategoryMember); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryMemberFirst( * org.esupportail.helpdesk.domain.beans.CategoryMember) */ @Override public void moveCategoryMemberFirst(final CategoryMember categoryMemberToMove) { List<CategoryMember> categoryMembers = getCategoryMembers(categoryMemberToMove.getCategory()); for (CategoryMember categoryMember : categoryMembers) { if (categoryMember.getOrder() < categoryMemberToMove.getOrder()) { categoryMember.setOrder(categoryMember.getOrder() + 1); updateCategoryMember(categoryMember); } } categoryMemberToMove.setOrder(0); updateCategoryMember(categoryMemberToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveCategoryMemberLast( * org.esupportail.helpdesk.domain.beans.CategoryMember) */ @Override public void moveCategoryMemberLast(final CategoryMember categoryMemberToMove) { List<CategoryMember> categoryMembers = getCategoryMembers(categoryMemberToMove.getCategory()); for (CategoryMember categoryMember : categoryMembers) { if (categoryMember.getOrder() > categoryMemberToMove.getOrder()) { categoryMember.setOrder(categoryMember.getOrder() - 1); updateCategoryMember(categoryMember); } } categoryMemberToMove.setOrder(categoryMembers.size() - 1); updateCategoryMember(categoryMemberToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#reorderCategoryMembers(java.util.List) */ @Override public void reorderCategoryMembers(final List<CategoryMember> categoryMembers) { int i = 0; for (CategoryMember categoryMember : categoryMembers) { if (categoryMember.getOrder() != i) { categoryMember.setOrder(i); daoService.updateCategoryMember(categoryMember); } i++; } } /** * @param category * @return the real (not inherited) department managers of a category. */ protected List<DepartmentManager> getRealDepartmentManagers(final Category category) { List<DepartmentManager> managers = new ArrayList<DepartmentManager>(); Department department = category.getDepartment(); for (CategoryMember categoryMember : getCategoryMembers(category)) { managers.add(getDepartmentManager(department, categoryMember.getUser())); } return managers; } /** * @see org.esupportail.helpdesk.domain.DomainService#getInheritedDepartmentManagers( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @RequestCache public List<DepartmentManager> getInheritedDepartmentManagers(final Category category) { Category parent = category.getParent(); if (parent == null) { return getDepartmentManagers(category.getDepartment()); } if (parent.getInheritMembers()) { return getInheritedDepartmentManagers(parent); } return getRealDepartmentManagers(parent); } /** * @see org.esupportail.helpdesk.domain.DomainService#getEffectiveDepartmentManagers( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @RequestCache public List<DepartmentManager> getEffectiveDepartmentManagers(final Category category) { if (category.getInheritMembers()) { return getInheritedDepartmentManagers(category); } return getRealDepartmentManagers(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#getEffectiveAvailableDepartmentManagers( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @RequestCache public List<DepartmentManager> getEffectiveAvailableDepartmentManagers(final Category category) { List<DepartmentManager> managers = new ArrayList<DepartmentManager>(); for (DepartmentManager manager : getEffectiveDepartmentManagers(category)) { if (manager.getAvailable()) { managers.add(manager); } } return managers; } /** * search a category if member (and recurse). * @param user * @param category * @param memberIfInherit * @param result */ protected void searchMemberCategories( final User user, final Category category, final boolean memberIfInherit, final List<Category> result) { boolean member = false; if (category.getInheritMembers()) { member = memberIfInherit; } else { member = isCategoryMember(category, user); } if (member) { result.add(category); } for (Category subCategory : getSubCategories(category)) { searchMemberCategories(user, subCategory, member, result); } } /** * @see org.esupportail.helpdesk.domain.DomainService#getMemberCategories( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public List<Category> getMemberCategories( final User user, final Department department) { List<Category> result = new ArrayList<Category>(); for (Category category : getRootCategories(department)) { searchMemberCategories(user, category, true, result); } return result; } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________FAQ() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaq(long) */ @Override public Faq getFaq(final long id) throws FaqNotFoundException { Faq faq = this.daoService.getFaq(id); if (faq == null) { throw new FaqNotFoundException("no FAQ found with id [" + id + "]"); } return faq; } /** * @see org.esupportail.helpdesk.domain.DomainService#addFaq( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void addFaq(final Faq faq) { fckEditorCodeCleaner.removeMaliciousTags(faq); faq.computeEffectiveScope(true); if (faq.getParent() == null) { faq.setOrder(daoService.getRootFaqsNumber(faq.getDepartment())); } else { faq.setOrder(daoService.getSubFaqsNumber(faq.getParent())); } daoService.addFaq(faq); } /** * Update the scope of the children of a FAQ if needed. * @param faq */ protected void updateFaqChildrenScope(final Faq faq) { for (Faq subFaq : getSubFaqs(faq)) { if (subFaq.computeEffectiveScope(true)) { daoService.updateFaq(subFaq); updateFaqChildrenScope(subFaq); } } } /** * @see org.esupportail.helpdesk.domain.DomainService#updateFaq( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void updateFaq(final Faq faq) { fckEditorCodeCleaner.removeMaliciousTags(faq); boolean effectiveScopeChanged = faq.computeEffectiveScope(true); daoService.updateFaq(faq); if (effectiveScopeChanged) { updateFaqChildrenScope(faq); } } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteFaq( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void deleteFaq(final Faq faq) { daoService.deleteFaq(faq); this.daoService.addDeletedItem(new DeletedItem(indexIdProvider.getIndexId(faq))); if (faq.getParent() == null) { reorderFaqs(daoService.getRootFaqs(faq.getDepartment())); } else { reorderFaqs(daoService.getSubFaqs(faq.getParent())); } } /** * Reorder a list of FAQs. * @param faqs */ protected void reorderFaqs(final List<Faq> faqs) { int i = 0; for (Faq faq : faqs) { if (faq.getOrder() != i) { faq.setOrder(i); daoService.updateFaq(faq); } i++; } } /** * @see org.esupportail.helpdesk.domain.DomainService#getRootFaqs( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<Faq> getRootFaqs(final Department department) { return this.daoService.getRootFaqs(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getRootFaqsNumber( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public int getRootFaqsNumber(final Department department) { return daoService.getRootFaqsNumber(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasRootFaqs( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public boolean hasRootFaqs(final Department department) { return getRootFaqsNumber(department) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#getRootFaqs() */ @Override public List<Faq> getRootFaqs() { return getRootFaqs(null); } /** * @see org.esupportail.helpdesk.domain.DomainService#getSubFaqs( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public List<Faq> getSubFaqs(final Faq faq) { return this.daoService.getSubFaqs(faq); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqUp( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void moveFaqUp(final Faq faq) { Faq previousFaq = daoService.getFaqByOrder( faq.getDepartment(), faq.getParent(), faq.getOrder() - 1); if (previousFaq != null) { faq.setOrder(faq.getOrder() - 1); updateFaq(faq); previousFaq.setOrder(previousFaq.getOrder() + 1); updateFaq(previousFaq); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqDown( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void moveFaqDown(final Faq faq) { Faq previousFaq = daoService.getFaqByOrder( faq.getDepartment(), faq.getParent(), faq.getOrder() + 1); if (previousFaq != null) { faq.setOrder(faq.getOrder() + 1); updateFaq(faq); previousFaq.setOrder(previousFaq.getOrder() - 1); updateFaq(previousFaq); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqFirst( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void moveFaqFirst(final Faq faqToMove) { List<Faq> faqs; if (faqToMove.getParent() == null) { faqs = getRootFaqs(faqToMove.getDepartment()); } else { faqs = getSubFaqs(faqToMove.getParent()); } for (Faq faq : faqs) { if (faq.getOrder() < faqToMove.getOrder()) { faq.setOrder(faq.getOrder() + 1); updateFaq(faq); } } faqToMove.setOrder(0); updateFaq(faqToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqLast( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void moveFaqLast(final Faq faqToMove) { List<Faq> faqs; if (faqToMove.getParent() == null) { faqs = getRootFaqs(faqToMove.getDepartment()); } else { faqs = getSubFaqs(faqToMove.getParent()); } for (Faq faq : faqs) { if (faq.getOrder() > faqToMove.getOrder()) { faq.setOrder(faq.getOrder() - 1); updateFaq(faq); } } faqToMove.setOrder(faqs.size() - 1); updateFaq(faqToMove); } /** * Change the department of FAQs. * @param faq * @param targetDepartment */ protected void changeDepartmentRec( final Faq faq, final Department targetDepartment) { for (Faq subFaq : getSubFaqs(faq)) { subFaq.setDepartment(targetDepartment); updateFaq(subFaq); changeDepartmentRec(subFaq, targetDepartment); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaq( * org.esupportail.helpdesk.domain.beans.Faq, org.esupportail.helpdesk.domain.beans.Department, * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void moveFaq( final Faq faqToUpdate, final Department targetDepartment, final Faq targetFaq) { Department oldDepartment = faqToUpdate.getDepartment(); Faq oldParent = faqToUpdate.getParent(); boolean departmentChanged; if (oldDepartment == null && targetDepartment == null) { departmentChanged = false; } else if (oldDepartment == null || targetDepartment == null) { departmentChanged = true; } else { departmentChanged = !oldDepartment.equals(targetDepartment); } boolean parentChanged; if (departmentChanged) { parentChanged = true; } else if (oldParent == null && targetFaq == null) { parentChanged = false; } else if (oldParent == null || targetFaq == null) { parentChanged = true; } else { parentChanged = !oldParent.equals(targetFaq); } if (parentChanged) { faqToUpdate.setParent(targetFaq); if (targetFaq == null) { faqToUpdate.setOrder(daoService.getRootFaqsNumber(targetDepartment)); } else { faqToUpdate.setOrder(daoService.getSubFaqsNumber(targetFaq)); } faqToUpdate.setDepartment(targetDepartment); updateFaq(faqToUpdate); if (oldParent == null) { reorderFaqs(getRootFaqs(oldDepartment)); } else { reorderFaqs(getSubFaqs(oldParent)); } } else { moveFaqLast(faqToUpdate); } if (departmentChanged) { for (Faq subFaq : getSubFaqs(faqToUpdate)) { changeDepartmentRec(subFaq, targetDepartment); } } } /** * @see org.esupportail.helpdesk.domain.DomainService#hasSubFaqs( * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public boolean hasSubFaqs(final Faq faq) { return daoService.getSubFaqsNumber(faq) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqsChangedAfter( * java.sql.Timestamp, int) */ @Override public List<Faq> getFaqsChangedAfter( final Timestamp lastUpdate, final int maxResults) { return daoService.getFaqsChangedAfter(lastUpdate, maxResults); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________FAQ_EVENT() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#addFaqEvent( * org.esupportail.helpdesk.domain.beans.FaqEvent) */ @Override public void addFaqEvent(final FaqEvent faqEvent) { daoService.addFaqEvent(faqEvent); } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqEvents() */ @Override public List<FaqEvent> getFaqEvents() { return daoService.getFaqEvents(); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteFaqEvent( * org.esupportail.helpdesk.domain.beans.FaqEvent) */ @Override public void deleteFaqEvent(final FaqEvent faqEvent) { daoService.deleteFaqEvent(faqEvent); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________TICKET() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicket(long) */ @Override @RequestCache public Ticket getTicket(final long id) throws TicketNotFoundException { Ticket ticket = this.daoService.getTicket(id); if (ticket == null) { throw new TicketNotFoundException("no ticket found with id [" + id + "]"); } return ticket; } /** * @see org.esupportail.helpdesk.domain.DomainService#getTickets( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public List<Ticket> getTickets(final Category category) { return daoService.getTickets(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasTickets( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public boolean hasTickets(final Category category) { return daoService.getTicketsNumber(category) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#getTickets( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<Ticket> getTickets(final Department department) { return daoService.getTickets(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOpenedTicketsByLastActionDate( * org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public List<Ticket> getOpenedTicketsByLastActionDate(final Department department) { return daoService.getOpenedTicketsByLastActionDate(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketsNumber( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public int getTicketsNumber(final Department department) { return daoService.getTicketsNumber(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateTicket( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void updateTicket(final Ticket ticket) { ticket.computeEffectiveDefaultTicketScope(); this.daoService.updateTicket(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#reloadTicket( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public Ticket reloadTicket(final Ticket ticket) { return daoService.reloadTicket(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteTicket( * org.esupportail.helpdesk.domain.beans.Ticket, boolean) */ @Override public void deleteTicket( final Ticket ticket, final boolean deleteFiles) { this.daoService.deleteTicket(ticket, deleteFiles); this.daoService.addDeletedItem(new DeletedItem(indexIdProvider.getIndexId(ticket))); } /** * @see org.esupportail.helpdesk.domain.DomainService#setCreator( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void setCreator(final Ticket ticket) { List<Action> actions = daoService.getActions(ticket, true); if (!actions.isEmpty()) { Action createAction = actions.get(0); if (ActionType.CREATE.equals(createAction.getActionType())) { ticket.setCreator(createAction.getUser()); } for (Action action : actions) { if (ActionType.CHANGE_DEPARTMENT.equals(action.getActionType())) { ticket.setCreationDepartment(action.getDepartmentBefore()); break; } } } if (ticket.getCreator() == null) { ticket.setCreator(ticket.getOwner()); } if (ticket.getCreationDepartment() == null) { ticket.setCreationDepartment(ticket.getDepartment()); } } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketsNumber() */ @Override public int getTicketsNumber() { return daoService.getTicketsNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTickets(long, int) */ @Override public List<Ticket> getTickets( final long startIndex, final int num) { return daoService.getTickets(startIndex, num); } /** * @param category * @param user * @return The opended tickets of the category managed by the user. */ protected List<Ticket> getOpenManagedTickets( final Category category, final User user) { return daoService.getOpenManagedTickets(category, user); } /** * @param department * @param user * @return The opended tickets of the department managed by the user. */ protected List<Ticket> getOpenManagedTickets( final Department department, final User user) { return daoService.getOpenManagedTickets(department, user); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOpenManagedTicketsNumber( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public int getOpenManagedTicketsNumber( final DepartmentManager departmentManager) { return daoService.getOpenManagedTicketsNumber( departmentManager.getDepartment(), departmentManager.getUser()); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasOpenManagedTickets( * org.esupportail.helpdesk.domain.beans.Category, org.esupportail.helpdesk.domain.beans.User) */ @Override public boolean hasOpenManagedTickets( final Category category, final User user) { return daoService.getOpenManagedTicketsNumber(category, user) > 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#hasOpenManagedTickets( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public boolean hasOpenManagedTickets( final DepartmentManager departmentManager) { return daoService.getOpenManagedTicketsNumber( departmentManager.getDepartment(), departmentManager.getUser()) > 0; } /** * @param user * @return the tickets owned by a user. */ protected List<Ticket> getOwnedTickets(final User user) { return daoService.getOwnedTickets(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#archiveTicket( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void archiveTicket(final Ticket ticket) { ArchivedTicket archivedTicket = new ArchivedTicket(ticket); daoService.addArchivedTicket(archivedTicket); for (Action action : daoService.getActions(ticket, true)) { ArchivedAction archivedAction = new ArchivedAction(action, archivedTicket); daoService.addArchivedAction(archivedAction); } for (FileInfo fileInfo : daoService.getFileInfos(ticket, true)) { ArchivedFileInfo archivedFileInfo = new ArchivedFileInfo(fileInfo, archivedTicket); daoService.addArchivedFileInfo(archivedFileInfo); } for (Invitation invitation : daoService.getInvitations(ticket)) { ArchivedInvitation archivedInvitation = new ArchivedInvitation(invitation, archivedTicket); daoService.addArchivedInvitation(archivedInvitation); } for (Bookmark bookmark : daoService.getBookmarks(ticket)) { bookmark.setTicket(null); bookmark.setArchivedTicket(archivedTicket); daoService.updateBookmark(bookmark); } for (HistoryItem historyItem : daoService.getHistoryItems(ticket)) { historyItem.setTicket(null); historyItem.setArchivedTicket(archivedTicket); daoService.updateHistoryItem(historyItem); } deleteTicket(ticket, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#getClosedTicketsBefore(java.sql.Timestamp, int) */ @Override public List<Ticket> getClosedTicketsBefore(final Timestamp timestamp, final int maxResults) { return daoService.getClosedTicketsBefore(timestamp, maxResults); } /** * @see org.esupportail.helpdesk.domain.DomainService#getNonApprovedTicketsClosedBefore(java.sql.Timestamp, int) */ @Override public List<Ticket> getNonApprovedTicketsClosedBefore( final Timestamp timestamp, final int maxResults) { return daoService.getNonApprovedTicketsClosedBefore(timestamp, maxResults); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketsChangedAfter( * java.sql.Timestamp, int) */ @Override public List<Ticket> getTicketsChangedAfter( final Timestamp lastUpdate, final int maxResults) { return daoService.getTicketsChangedAfter(lastUpdate, maxResults); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketComputerUrl( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public String getTicketComputerUrl(final Ticket ticket) { if (ticket == null) { return null; } if (ticket.getComputer() == null) { return null; } Department department = ticket.getDepartment(); String computerUrlBuilderName = department.getComputerUrlBuilderName(); if (computerUrlBuilderName == null) { computerUrlBuilderName = getDefaultComputerUrlBuilderName(); } ComputerUrlBuilder computerUrlBuilder = computerUrlBuilderStore.getComputerUrlBuilder(computerUrlBuilderName); if (computerUrlBuilder == null) { return null; } return computerUrlBuilder.getUrl(ticket.getComputer()); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOldestTicketDate() */ @Override public Timestamp getOldestTicketDate() { return daoService.getOldestTicketDate(); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteAllTickets() */ @Override public void deleteAllTickets() { daoService.deleteAllTickets(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________ACTION() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getActions( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public List<Action> getActions(final Ticket ticket) { return daoService.getActions(ticket, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#getLastAction( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public Action getLastAction(final Ticket ticket) { return daoService.getLastAction(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#getActions(long, int) */ @Override public List<Action> getActions( final long startIndex, final int num) { return daoService.getActions(startIndex, num); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateAction( * org.esupportail.helpdesk.domain.beans.Action) */ @Override public void updateAction(final Action action) { fckEditorCodeCleaner.removeMaliciousTags(action); daoService.updateAction(action); } /** * @see org.esupportail.helpdesk.domain.DomainService#addAction( * org.esupportail.helpdesk.domain.beans.Action) */ @Override public void addAction(final Action action) { fckEditorCodeCleaner.removeMaliciousTags(action); daoService.addAction(action); } /** * @see org.esupportail.helpdesk.domain.DomainService#getActionsNumber() */ @Override public int getActionsNumber() { return daoService.getActionsNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getActionStyleClass( * org.esupportail.helpdesk.domain.beans.Action) */ @Override @RequestCache public String getActionStyleClass(final Action action) { User user = action.getUser(); if (user == null) { return "actionApplication"; } Ticket ticket = action.getTicket(); if (user.equals(ticket.getOwner())) { return "actionOwner"; } if (isDepartmentManager(ticket.getDepartment(), user)) { return "actionManager"; } if (isInvited(user, ticket)) { return "actionInvited"; } return "actionUser"; } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________FILEINFO() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getFileInfos( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public List<FileInfo> getFileInfos(final Ticket ticket) { return daoService.getFileInfos(ticket, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#addFileInfo( * org.esupportail.helpdesk.domain.beans.FileInfo) */ @Override public void addFileInfo(final FileInfo fileInfo) { fileInfo.setFilesize(fileInfo.getContent().length); daoService.addFileInfo(fileInfo); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateFileInfo( * org.esupportail.helpdesk.domain.beans.FileInfo) */ @Override public void updateFileInfo(final FileInfo fileInfo) { daoService.updateFileInfo(fileInfo); } /** * @see org.esupportail.helpdesk.domain.DomainService#getFileInfoContent( * org.esupportail.helpdesk.domain.beans.FileInfo) */ @Override public byte[] getFileInfoContent(final FileInfo fileInfo) { return daoService.getFileInfoContent(fileInfo); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________ARCHIVED_TICKET() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedTicket(long) */ @Override @RequestCache public ArchivedTicket getArchivedTicket(final long id) throws ArchivedTicketNotFoundException { ArchivedTicket archivedTicket = this.daoService.getArchivedTicket(id); if (archivedTicket == null) { throw new ArchivedTicketNotFoundException( "no archived ticket found with id [" + id + "]"); } return archivedTicket; } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketsArchivedAfter( * java.sql.Timestamp, int) */ @Override public List<ArchivedTicket> getTicketsArchivedAfter( final Timestamp lastUpdate, final int maxResults) { return daoService.getTicketsArchivedAfter(lastUpdate, maxResults); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedTicketByOriginalId(long) */ @Override @RequestCache public ArchivedTicket getArchivedTicketByOriginalId( final long id) throws ArchivedTicketNotFoundException { ArchivedTicket archivedTicket = daoService.getArchivedTicketByOriginalId(id); if (archivedTicket == null) { throw new ArchivedTicketNotFoundException( "no archived ticket found with oringinal id [" + id + "]"); } return archivedTicket; } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedTicketsNumber() */ @Override public int getArchivedTicketsNumber() { return daoService.getArchivedTicketsNumber(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedTicketsNumber( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public int getArchivedTicketsNumber(final Department department) { return daoService.getArchivedTicketsNumber(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedTickets(long, int) */ @Override public List<ArchivedTicket> getArchivedTickets( final long startIndex, final int num) { return daoService.getArchivedTickets(startIndex, num); } ////////////////////////////////////////////////////////////// // ArchivedAction ////////////////////////////////////////////////////////////// /** * @see org.esupportail.helpdesk.domain.DomainService#updateArchivedAction( * org.esupportail.helpdesk.domain.beans.ArchivedAction) */ @Override public void updateArchivedAction(final ArchivedAction archivedAction) { fckEditorCodeCleaner.removeMaliciousTags(archivedAction); daoService.updateArchivedAction(archivedAction); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedActions( * org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public List<ArchivedAction> getArchivedActions( final ArchivedTicket archivedTicket) { return daoService.getArchivedActions(archivedTicket, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedActions(long, int) */ @Override public List<ArchivedAction> getArchivedActions( final long startIndex, final int num) { return daoService.getArchivedActions(startIndex, num); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedActionStyleClass( * org.esupportail.helpdesk.domain.beans.ArchivedAction) */ @Override @RequestCache public String getArchivedActionStyleClass(final ArchivedAction archivedAction) { User user = archivedAction.getUser(); if (user == null) { return "actionApplication"; } ArchivedTicket archivedTicket = archivedAction.getArchivedTicket(); if (user.equals(archivedTicket.getOwner())) { return "actionOwner"; } if (isDepartmentManager(archivedTicket.getDepartment(), user)) { return "actionManager"; } if (isInvited(user, archivedTicket)) { return "actionInvited"; } return "actionUser"; } ////////////////////////////////////////////////////////////// // ArchivedFileInfo ////////////////////////////////////////////////////////////// /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedFileInfos( * org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public List<ArchivedFileInfo> getArchivedFileInfos( final ArchivedTicket archivedTicket) { return daoService.getArchivedFileInfos(archivedTicket); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedFileInfoContent( * org.esupportail.helpdesk.domain.beans.ArchivedFileInfo) */ @Override public byte[] getArchivedFileInfoContent(final ArchivedFileInfo archivedFileInfo) { return daoService.getArchivedFileInfoContent(archivedFileInfo); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________TICKET_VIEW() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketLastView( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public Timestamp getTicketLastView( final User user, final Ticket ticket) { TicketView ticketView = daoService.getTicketView(user, ticket); if (ticketView == null) { return null; } return ticketView.getDate(); } /** * @see org.esupportail.helpdesk.domain.DomainService#setTicketLastView( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.sql.Timestamp) */ @Override public void setTicketLastView( final User user, final Ticket ticket, final Timestamp ts) { TicketView ticketView = daoService.getTicketView(user, ticket); if (ts != null) { if (ticketView == null) { daoService.addTicketView(new TicketView(user, ticket, ts)); } else { ticketView.setDate(ts); daoService.updateTicketView(ticketView); } } else { if (ticketView != null) { daoService.deleteTicketView(ticketView); } } } /** * @see org.esupportail.helpdesk.domain.DomainService#hasTicketChangedSince( * org.esupportail.helpdesk.domain.beans.Ticket, java.sql.Timestamp) */ @Override @RequestCache public boolean hasTicketChangedSince( final Ticket ticket, final Timestamp date) { if (date == null) { return true; } return date.before(ticket.getLastActionDate()); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasTicketChangedSinceLastView( * org.esupportail.helpdesk.domain.beans.Ticket, org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean hasTicketChangedSinceLastView( final Ticket ticket, final User user) { Timestamp lastView = getTicketLastView(user, ticket); if (lastView == null) { return true; } return lastView.before(ticket.getLastActionDate()); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________TICKET_MONITORING() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketMonitorings(org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public List<TicketMonitoring> getTicketMonitorings( final Ticket ticket) { return daoService.getTicketMonitorings(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#userMonitorsTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public boolean userMonitorsTicket( final User user, final Ticket ticket) { return daoService.getTicketMonitoring(user, ticket) != null; } /** * @see org.esupportail.helpdesk.domain.DomainService#setTicketMonitoring( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void setTicketMonitoring( final User user, final Ticket ticket) { if (!userMonitorsTicket(user, ticket)) { daoService.addTicketMonitoring(new TicketMonitoring(user, ticket)); } } /** * @see org.esupportail.helpdesk.domain.DomainService#unsetTicketMonitoring( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void unsetTicketMonitoring( final User user, final Ticket ticket) { TicketMonitoring ticketMonitoring = daoService.getTicketMonitoring(user, ticket); if (ticketMonitoring != null) { daoService.deleteTicketMonitoring(ticketMonitoring); } } /** * @see org.esupportail.helpdesk.domain.DomainService#ticketMonitoringSendAlerts( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, java.util.List, boolean) */ @Override public void ticketMonitoringSendAlerts( final User author, final Ticket ticket, final List<User> excludedUsers, final boolean expiration) { monitoringSender.ticketMonitoringSendAlerts(author, ticket, excludedUsers, expiration); } /** * @see org.esupportail.helpdesk.domain.DomainService#getMonitoringUsers( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public List<User> getMonitoringUsers(final Ticket ticket) { return monitoringSender.getMonitoringUsers(ticket); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________ALERT() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getAlerts( * org.esupportail.helpdesk.domain.beans.Action) */ @Override public List<Alert> getAlerts(final Action action) { return daoService.getAlerts(action); } /** * @see org.esupportail.helpdesk.domain.DomainService#addAlert( * org.esupportail.helpdesk.domain.beans.Action, org.esupportail.helpdesk.domain.beans.User) */ @Override public void addAlert( final Action action, final User user) { daoService.addAlert(new Alert(action, user)); } /** * @see org.esupportail.helpdesk.domain.DomainService#addAlert( * org.esupportail.helpdesk.domain.beans.Action, java.lang.String) */ @Override public void addAlert( final Action action, final String email) { daoService.addAlert(new Alert(action, email)); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________INVITATION() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#isInvited( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public boolean isInvited( final User user, final Ticket ticket) { return daoService.getInvitation(user, ticket) != null; } /** * @see org.esupportail.helpdesk.domain.DomainService#getInvitations( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public List<Invitation> getInvitations( final Ticket ticket) { return daoService.getInvitations(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#isInvited( * org.esupportail.helpdesk.domain.beans.User, * org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public boolean isInvited( final User user, final ArchivedTicket archivedTicket) { return daoService.getArchivedInvitation(user, archivedTicket) != null; } /** * Remove an invitation. * @param archivedInvitation */ protected void removeInvitation( final ArchivedInvitation archivedInvitation) { daoService.deleteArchivedInvitation(archivedInvitation); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedInvitations( * org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public List<ArchivedInvitation> getArchivedInvitations( final ArchivedTicket archivedTicket) { return daoService.getArchivedInvitations(archivedTicket); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentInvitations( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<DepartmentInvitation> getDepartmentInvitations( final Department department) { return daoService.getDepartmentInvitations(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#isDepartmentInvited( * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.User) */ @Override public boolean isDepartmentInvited( final Department department, final User user) { return daoService.getDepartmentInvitation(user, department) != null; } /** * @see org.esupportail.helpdesk.domain.DomainService#addDepartmentInvitation( * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.User) */ @Override public void addDepartmentInvitation( final Department department, final User user) { daoService.addDepartmentInvitation(new DepartmentInvitation(user, department)); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteDepartmentInvitation( * org.esupportail.helpdesk.domain.beans.DepartmentInvitation) */ @Override public void deleteDepartmentInvitation( final DepartmentInvitation departmentInvitation) { daoService.deleteDepartmentInvitation(departmentInvitation); } /** * @see org.esupportail.helpdesk.domain.DomainService#getInvitedUsers( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public List<User> getInvitedUsers(final User author) { return daoService.getInvitedUsers(author); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________DELETED_ITEM() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteAllDeletedItems() */ @Override public void deleteAllDeletedItems() { daoService.deleteAllDeletedItems(); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteDeletedItem( * org.esupportail.helpdesk.domain.beans.DeletedItem) */ @Override public void deleteDeletedItem(final DeletedItem deletedItem) { daoService.deleteDeletedItem(deletedItem); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDeletedItems() */ @Override public List<DeletedItem> getDeletedItems() { return daoService.getDeletedItems(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________BOOKMARK() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getBookmarks( * org.esupportail.helpdesk.domain.beans.User) */ @Override public List<Bookmark> getBookmarks(final User user) { return daoService.getBookmarks(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#getBookmarks( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public List<Bookmark> getBookmarks(final Ticket ticket) { return daoService.getBookmarks(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#getBookmark( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public Bookmark getBookmark( final User user, final Ticket ticket) { return daoService.getBookmark(user, ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#getBookmark( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public Bookmark getBookmark( final User user, final ArchivedTicket archivedTicket) { return daoService.getBookmark(user, archivedTicket); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteBookmark( * org.esupportail.helpdesk.domain.beans.Bookmark) */ @Override public void deleteBookmark(final Bookmark bookmark) { daoService.deleteBookmark(bookmark); } /** * Add a bookmark. * @param bookmark */ protected void addBookmark(final Bookmark bookmark) { daoService.addBookmark(bookmark); } /** * @see org.esupportail.helpdesk.domain.DomainService#addBookmark( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void addBookmark( final User user, final Ticket ticket) { if (getBookmark(user, ticket) == null) { addBookmark(new Bookmark(user, ticket)); } } /** * @see org.esupportail.helpdesk.domain.DomainService#addBookmark( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public void addBookmark( final User user, final ArchivedTicket archivedTicket) { if (getBookmark(user, archivedTicket) == null) { addBookmark(new Bookmark(user, archivedTicket)); } } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________HISTORY_ITEM() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getHistoryItems( * org.esupportail.helpdesk.domain.beans.User) */ @Override public List<HistoryItem> getHistoryItems( final User user) { return daoService.getHistoryItems(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#addHistoryItem( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void addHistoryItem( final User user, final Ticket ticket) { List<HistoryItem> historyItems = getHistoryItems(user); int index = 0; for (HistoryItem hi : historyItems) { if (index > (historyMaxLength - 2) || ticket.equals(hi.getTicket())) { daoService.deleteHistoryItem(hi); } else { index++; } } daoService.addHistoryItem(new HistoryItem(user, ticket)); } /** * @see org.esupportail.helpdesk.domain.DomainService#addHistoryItem( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public void addHistoryItem( final User user, final ArchivedTicket archivedTicket) { List<HistoryItem> historyItems = getHistoryItems(user); int index = 0; for (HistoryItem hi : historyItems) { if (index > (historyMaxLength - 2) || archivedTicket.equals(hi.getArchivedTicket())) { daoService.deleteHistoryItem(hi); } else { index++; } } daoService.addHistoryItem(new HistoryItem(user, archivedTicket)); } /** * @see org.esupportail.helpdesk.domain.DomainService#clearHistoryItems( * org.esupportail.helpdesk.domain.beans.User) */ @Override public void clearHistoryItems( final User user) { daoService.clearHistoryItems(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#clearHistoryItems() */ @Override public void clearHistoryItems() { daoService.clearHistoryItems(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________RESPONSE() { // } /** * Add a response. * @param response */ @Override public void addResponse( final Response response) { daoService.addResponse(response); } /** * Update a response. * @param response */ @Override public void updateResponse( final Response response) { daoService.updateResponse(response); } /** * Delete a response. * @param response */ @Override public void deleteResponse( final Response response) { daoService.deleteResponse(response); } /** * @param user * @return the responses of a user. */ @Override public List<Response> getUserResponses( final User user) { return daoService.getUserResponses(user); } /** * @param department * @return the responses of a department. */ @Override public List<Response> getDepartmentResponses( final Department department) { return daoService.getDepartmentResponses(department); } /** * @return the global responses. */ @Override public List<Response> getGlobalResponses() { return daoService.getGlobalResponses(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________ICONS() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getIcon(long) */ @Override @RequestCache public Icon getIcon(final long id) { Icon icon = daoService.getIcon(id); if (icon == null) { throw new IconNotFoundException("no icon found with id [" + id + "]"); } return icon; } /** * @see org.esupportail.helpdesk.domain.DomainService#getIcons() */ @Override public List<Icon> getIcons() { return this.daoService.getIcons(); } /** * @param iconName * @param contentType * @param path * @return an Icon */ protected Icon createIconFromLocalFile( final String iconName, final String contentType, final String path) { Icon icon = new Icon( iconName, contentType, FileUtils.getFileContent(path)); daoService.addIcon(icon); return icon; } /** * @param iconName * @param fileBasename * @return an Icon */ protected Icon createIconFromLocalPngFile( final String iconName, final String fileBasename) { String theIconName = iconName; int i = 2; while (getIconByName(theIconName) != null) { theIconName = iconName + i; i++; } return createIconFromLocalFile( theIconName, "image/png", "/properties/web/icons/" + fileBasename + ".png"); } /** * @see org.esupportail.helpdesk.domain.DomainService#addIcon(java.lang.String) */ @Override public Icon addIcon( final String name) { return createIconFromLocalPngFile(name, "new"); } /** * @see org.esupportail.helpdesk.domain.DomainService#createIconFromLocalPngFile(java.lang.String) */ @Override public Icon createIconFromLocalPngFile(final String iconName) { return createIconFromLocalPngFile(iconName, iconName); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteIcon( * org.esupportail.helpdesk.domain.beans.Icon) */ @Override public void deleteIcon(final Icon icon) { daoService.deleteIcon(icon); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateIcon( * org.esupportail.helpdesk.domain.beans.Icon) */ @Override public void updateIcon(final Icon icon) { daoService.updateIcon(icon); } /** * @see org.esupportail.helpdesk.domain.DomainService#getIconByName(java.lang.String) */ @Override public Icon getIconByName(final String name) { return daoService.getIconByName(name); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________VERSION_MANAGER() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getDatabaseVersion() */ @Override public Version getDatabaseVersion() throws ConfigException { VersionManager versionManager = daoService.getVersionManager(); if (versionManager == null) { return null; } return new Version(versionManager.getVersion()); } /** * @see org.esupportail.helpdesk.domain.DomainService#setDatabaseVersion(java.lang.String) */ @Override public void setDatabaseVersion(final String version) { if (logger.isDebugEnabled()) { logger.debug("setting database version to '" + version + "'..."); } VersionManager versionManager = daoService.getVersionManager(); versionManager.setVersion(version); daoService.updateVersionManager(versionManager); if (logger.isDebugEnabled()) { logger.debug("database version set to '" + version + "'."); } } /** * @see org.esupportail.helpdesk.domain.DomainService#setDatabaseVersion( * org.esupportail.commons.services.application.Version) */ @Override public void setDatabaseVersion(final Version version) { setDatabaseVersion(version.toString()); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________STATE() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#setUpgradeState(java.lang.String) */ @Override public void setUpgradeState(final String upgradeState) { State state = daoService.getState(); state.setUpgradeState(upgradeState); daoService.updateState(state); } /** * @see org.esupportail.helpdesk.domain.DomainService#getUpgradeState() */ @Override public String getUpgradeState() { return daoService.getState().getUpgradeState(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________CONFIG() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#setTicketsLastIndexTime( * java.sql.Timestamp) */ @Override public void setTicketsLastIndexTime(final Timestamp lastIndexTime) { Config config = daoService.getConfig(); config.setTicketsLastIndexTime(lastIndexTime); daoService.updateConfig(config); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketsLastIndexTime() */ @Override public Timestamp getTicketsLastIndexTime() { return daoService.getConfig().getTicketsLastIndexTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#setFaqsLastIndexTime( * java.sql.Timestamp) */ @Override public void setFaqsLastIndexTime(final Timestamp lastIndexTime) { Config config = daoService.getConfig(); config.setFaqsLastIndexTime(lastIndexTime); daoService.updateConfig(config); } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqsLastIndexTime() */ @Override public Timestamp getFaqsLastIndexTime() { return daoService.getConfig().getFaqsLastIndexTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#setArchivedTicketsLastIndexTime( * java.sql.Timestamp) */ @Override public void setArchivedTicketsLastIndexTime(final Timestamp lastIndexTime) { Config config = daoService.getConfig(); config.setArchivedTicketsLastIndexTime(lastIndexTime); daoService.updateConfig(config); } /** * @see org.esupportail.helpdesk.domain.DomainService#getArchivedTicketsLastIndexTime() */ @Override public Timestamp getArchivedTicketsLastIndexTime() { return daoService.getConfig().getArchivedTicketsLastIndexTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#resetIndexTimes() */ @Override public void resetIndexTimes() { setTicketsLastIndexTime(null); setFaqsLastIndexTime(null); setArchivedTicketsLastIndexTime(null); } /** * @see org.esupportail.helpdesk.domain.DomainService#setDefaultDepartmentIcon( * org.esupportail.helpdesk.domain.beans.Icon) */ @Override public void setDefaultDepartmentIcon(final Icon icon) { Config config = daoService.getConfig(); config.setDefaultDepartmentIcon(icon); daoService.updateConfig(config); } /** * @see org.esupportail.helpdesk.domain.DomainService#setDefaultCategoryIcon( * org.esupportail.helpdesk.domain.beans.Icon) */ @Override public void setDefaultCategoryIcon(final Icon icon) { Config config = daoService.getConfig(); config.setDefaultCategoryIcon(icon); daoService.updateConfig(config); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDefaultCategoryIcon() */ @Override public Icon getDefaultCategoryIcon() { return daoService.getConfig().getDefaultCategoryIcon(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDefaultDepartmentIcon() */ @Override public Icon getDefaultDepartmentIcon() { return daoService.getConfig().getDefaultDepartmentIcon(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getInstallDate() */ @Override public Timestamp getInstallDate() { return daoService.getConfig().getInstallDate(); } /** * Set the department selection context time (the last time that the context of the department selection has changed). */ protected void updateDepartmentSelectionContextTime() { Config config = daoService.getConfig(); config.setDepartmentSelectionContextTime(new Timestamp(System.currentTimeMillis())); daoService.updateConfig(config); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentSelectionContextTime() */ @Override public Timestamp getDepartmentSelectionContextTime() { return daoService.getConfig().getDepartmentSelectionContextTime(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________DEPARTMENT_SELECTION_CONFIG() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getDepartmentSelectionConfig() */ @Override public DepartmentSelectionConfig getDepartmentSelectionConfig() { return daoService.getLatestDepartmentSelectionConfig(); } /** * @see org.esupportail.helpdesk.domain.DomainService#setDepartmentSelectionConfig( * org.esupportail.helpdesk.domain.beans.User, java.lang.String) */ @Override public void setDepartmentSelectionConfig( final User author, final String data) { DepartmentSelectionConfig config = new DepartmentSelectionConfig( author, data, new Timestamp(System.currentTimeMillis())); daoService.addDepartmentSelectionConfig(config); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________FAQ_LINK() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqLinks( * org.esupportail.helpdesk.domain.beans.Department) */ @Override public List<FaqLink> getFaqLinks(final Department department) { return daoService.getFaqLinks(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqLinks( * org.esupportail.helpdesk.domain.beans.Category) */ @Override public List<FaqLink> getFaqLinks(final Category category) { return daoService.getFaqLinks(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#addFaqLink( * org.esupportail.helpdesk.domain.beans.FaqLink) */ @Override public void addFaqLink(final FaqLink faqLink) { if (faqLink.getDepartment() != null) { faqLink.setOrder(daoService.getFaqLinksNumber(faqLink.getDepartment())); } else { faqLink.setOrder(daoService.getFaqLinksNumber(faqLink.getCategory())); } daoService.addFaqLink(faqLink); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateFaqLink( * org.esupportail.helpdesk.domain.beans.FaqLink) */ @Override public void updateFaqLink(final FaqLink faqLink) { daoService.updateFaqLink(faqLink); } /** * Reorder a list of faq links. * @param faqLinks */ protected void reorderFaqLinks(final List<FaqLink> faqLinks) { int i = 0; for (FaqLink faqLink : faqLinks) { if (faqLink.getOrder() != i) { faqLink.setOrder(i); daoService.updateFaqLink(faqLink); } i++; } } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteFaqLink( * org.esupportail.helpdesk.domain.beans.FaqLink) */ @Override public void deleteFaqLink(final FaqLink faqLink) { daoService.deleteFaqLink(faqLink); if (faqLink.getDepartment() != null) { reorderFaqLinks(daoService.getFaqLinks(faqLink.getDepartment())); } else { reorderFaqLinks(daoService.getFaqLinks(faqLink.getCategory())); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqLinkUp( * org.esupportail.helpdesk.domain.beans.FaqLink) */ @Override public void moveFaqLinkUp(final FaqLink faqLink) { FaqLink previousFaqLink = daoService.getFaqLinkByOrder( faqLink.getDepartment(), faqLink.getCategory(), faqLink.getOrder() - 1); if (previousFaqLink != null) { faqLink.setOrder(faqLink.getOrder() - 1); updateFaqLink(faqLink); previousFaqLink.setOrder(previousFaqLink.getOrder() + 1); updateFaqLink(previousFaqLink); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqLinkDown( * org.esupportail.helpdesk.domain.beans.FaqLink) */ @Override public void moveFaqLinkDown(final FaqLink faqLink) { FaqLink nextFaqLink = daoService.getFaqLinkByOrder( faqLink.getDepartment(), faqLink.getCategory(), faqLink.getOrder() + 1); if (nextFaqLink != null) { faqLink.setOrder(faqLink.getOrder() + 1); updateFaqLink(faqLink); nextFaqLink.setOrder(nextFaqLink.getOrder() - 1); updateFaqLink(nextFaqLink); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqLinkFirst( * org.esupportail.helpdesk.domain.beans.FaqLink) */ @Override public void moveFaqLinkFirst(final FaqLink faqLinkToMove) { List<FaqLink> faqLinks; if (faqLinkToMove.getDepartment() != null) { faqLinks = getFaqLinks(faqLinkToMove.getDepartment()); } else { faqLinks = getFaqLinks(faqLinkToMove.getCategory()); } for (FaqLink faqLink : faqLinks) { if (faqLink.getOrder() < faqLinkToMove.getOrder()) { faqLink.setOrder(faqLink.getOrder() + 1); updateFaqLink(faqLink); } } faqLinkToMove.setOrder(0); updateFaqLink(faqLinkToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#moveFaqLinkLast( * org.esupportail.helpdesk.domain.beans.FaqLink) */ @Override public void moveFaqLinkLast(final FaqLink faqLinkToMove) { List<FaqLink> faqLinks; if (faqLinkToMove.getDepartment() != null) { faqLinks = getFaqLinks(faqLinkToMove.getDepartment()); } else { faqLinks = getFaqLinks(faqLinkToMove.getCategory()); } for (FaqLink faqLink : faqLinks) { if (faqLink.getOrder() > faqLinkToMove.getOrder()) { faqLink.setOrder(faqLink.getOrder() - 1); updateFaqLink(faqLink); } } faqLinkToMove.setOrder(faqLinks.size() - 1); updateFaqLink(faqLinkToMove); } /** * @see org.esupportail.helpdesk.domain.DomainService#getInheritedFaqLinks( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @RequestCache public List<FaqLink> getInheritedFaqLinks( final Category category) { if (category.getParent() != null) { return getEffectiveFaqLinks(category.getParent()); } return getFaqLinks(category.getDepartment()); } /** * @see org.esupportail.helpdesk.domain.DomainService#getEffectiveFaqLinks( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @RequestCache public List<FaqLink> getEffectiveFaqLinks( final Category category) { if (!category.getInheritFaqLinks()) { return getFaqLinks(category); } return getInheritedFaqLinks(category); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________AUTHORIZATIONS() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewAdmins( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userCanViewAdmins(final User user) { if (user == null) { return false; } if (user.getAdmin()) { return true; } return isDepartmentManager(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanAddAdmin( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userCanAddAdmin(final User user) { if (user == null) { return false; } return user.getAdmin(); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanDeleteAdmin( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userCanDeleteAdmin(final User user, final User admin) { if (user == null) { return false; } if (!user.getAdmin()) { return false; } return !user.equals(admin); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewDepartments( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userCanViewDepartments(final User user) { if (user == null) { return false; } if (user.getAdmin()) { return true; } return isDepartmentManager(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanManageDepartments( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userCanManageDepartments(final User user) { if (user == null) { return false; } return user.getAdmin(); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewDepartment( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanViewDepartment( final User user, final Department department) { if (user == null) { return false; } if (user.getAdmin()) { return true; } return isDepartmentManager(department, user); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanDeleteDepartment( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanDeleteDepartment( final User user, final Department department) { return userCanManageDepartments(user) && !hasVirtualDepartments(department) && !hasRootCategories(department) && !hasRootFaqs(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditDepartmentProperties( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanEditDepartmentProperties( final User user, final Department department) { if (user == null) { return false; } if (user.getAdmin()) { return true; } try { DepartmentManager manager = getDepartmentManager(department, user); return manager.getManageProperties(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditDepartmentManagers( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanEditDepartmentManagers( final User user, final Department department) { if (user == null) { return false; } if (user.getAdmin()) { return true; } try { DepartmentManager manager = getDepartmentManager(department, user); return manager.getManageManagers(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditDepartmentCategories( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanEditDepartmentCategories( final User user, final Department department) { if (user == null) { return false; } try { DepartmentManager manager = getDepartmentManager(department, user); return manager.getManageCategories(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanSetAvailability( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override @RequestCache public boolean userCanSetAvailability( final User user, final DepartmentManager departmentManager) { if (user == null) { return false; } if (departmentManager == null) { return false; } try { DepartmentManager manager = getDepartmentManager( departmentManager.getDepartment(), user); if (manager.getManageManagers()) { return true; } if (!user.equals(departmentManager.getUser())) { return false; } return manager.getSetOwnAvailability(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewTicket( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress, * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanViewTicket( final User user, final InetAddress client, final Ticket ticket) { return userCanViewTicket(user, ticket, getTicketViewDepartments(user, client)); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewTicket( * org.esupportail.helpdesk.domain.beans.User, * org.esupportail.helpdesk.domain.beans.Ticket, java.util.List) */ @Override @RequestCache public boolean userCanViewTicket( final User user, final Ticket ticket, final List<Department> visibleDepartments) { if (user == null || ticket == null) { return false; } if (isDepartmentManager(ticket.getDepartment(), user)) { return true; } if (user.equals(ticket.getOwner())) { return true; } if (isInvited(user, ticket)) { return true; } if (!TicketScope.PUBLIC.equals(ticket.getEffectiveScope())) { return false; } if (visibleDepartments.contains(ticket.getDepartment())) { return true; } return false; } /** * @param user * @param ticket * @param invited * @param objectScope * @param objectUser * @return true if the user can see an Action of a FileInfo. */ protected boolean userCanViewActionOrFileInfo( final User user, final Ticket ticket, final boolean invited, final String objectScope, final User objectUser) { if (user == null) { return false; } if (isDepartmentManager(ticket.getDepartment(), user)) { return true; } if (ActionScope.MANAGER.equals(objectScope)) { return user.equals(objectUser); } if (user.equals(ticket.getOwner())) { return true; } if (ActionScope.OWNER.equals(objectScope)) { return false; } if (invited) { return true; } if (ActionScope.INVITED.equals(objectScope)) { return false; } return TicketScope.PUBLIC.equals(ticket.getEffectiveScope()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewActionMessage( * org.esupportail.helpdesk.domain.beans.User, boolean, org.esupportail.helpdesk.domain.beans.Action) */ @Override @RequestCache public boolean userCanViewActionMessage( final User user, final boolean invited, final Action action) { return userCanViewActionOrFileInfo(user, action.getTicket(), invited, action.getScope(), action.getUser()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanDownload( * org.esupportail.helpdesk.domain.beans.User, boolean, org.esupportail.helpdesk.domain.beans.FileInfo) */ @Override @RequestCache public boolean userCanDownload( final User user, final boolean invited, final FileInfo fileInfo) { return userCanViewActionOrFileInfo(user, fileInfo.getTicket(), invited, fileInfo.getScope(), fileInfo.getUser()); } /** * @see org.esupportail.helpdesk.domain.DomainService#actionMonitorable( * org.esupportail.helpdesk.domain.beans.User, boolean, org.esupportail.helpdesk.domain.beans.Action) */ @Override @RequestCache public boolean actionMonitorable( final User user, final boolean invited, final Action action) { if (ActionType.APPROVE_CLOSURE.equals(action.getActionType()) || ActionType.APPROVE_CLOSURE.equals(action.getActionType()) || ActionType.ASSIGN.equals(action.getActionType()) || ActionType.CANCEL.equals(action.getActionType()) || ActionType.CANCEL_POSTPONEMENT.equals(action.getActionType()) || ActionType.CHANGE_OWNER.equals(action.getActionType()) || ActionType.CLOSE.equals(action.getActionType()) || ActionType.CLOSE_APPROVE.equals(action.getActionType()) || ActionType.CREATE.equals(action.getActionType()) || ActionType.EXPIRE.equals(action.getActionType()) || ActionType.FREE.equals(action.getActionType()) || ActionType.POSTPONE.equals(action.getActionType()) || ActionType.REFUSE.equals(action.getActionType()) || ActionType.REFUSE_CLOSURE.equals(action.getActionType()) || ActionType.REOPEN.equals(action.getActionType()) || ActionType.REQUEST_INFORMATION.equals(action.getActionType()) || ActionType.TAKE.equals(action.getActionType())) { return true; } if (action.getUser() == null) { return false; } if (ActionType.GIVE_INFORMATION.equals(action.getActionType())) { return userCanViewActionMessage(user, invited, action); } return true; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewArchivedTicket( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress, * org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override @RequestCache public boolean userCanViewArchivedTicket( final User user, final InetAddress client, final ArchivedTicket archivedTicket) { return userCanViewArchivedTicket( user, archivedTicket, getTicketViewDepartments(user, client)); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewArchivedTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.ArchivedTicket, * java.util.List) */ @Override @RequestCache public boolean userCanViewArchivedTicket( final User user, final ArchivedTicket archivedTicket, final List<Department> visibleDepartments) { if (user == null || archivedTicket == null) { return false; } if (isDepartmentManager(archivedTicket.getDepartment(), user)) { return true; } if (user.equals(archivedTicket.getOwner())) { return true; } if (isInvited(user, archivedTicket)) { return true; } if (!TicketScope.PUBLIC.equals(archivedTicket.getEffectiveScope())) { return false; } if (visibleDepartments.contains(archivedTicket.getDepartment())) { return true; } return false; } /** * @param user * @param archivedTicket * @param invited * @param objectScope * @return true if the user can see the archived Action or FileInfo */ @RequestCache protected boolean userCanViewArchivedActionOrFileInfo( final User user, final ArchivedTicket archivedTicket, final boolean invited, final String objectScope) { if (user == null) { return false; } if (isDepartmentManager(archivedTicket.getDepartment(), user)) { return true; } if (ActionScope.MANAGER.equals(objectScope)) { return false; } if (user.equals(archivedTicket.getOwner())) { return true; } if (ActionScope.OWNER.equals(objectScope)) { return false; } if (invited) { return true; } if (ActionScope.INVITED.equals(objectScope)) { return false; } return TicketScope.PUBLIC.equals(objectScope); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewArchivedAction( * org.esupportail.helpdesk.domain.beans.User, boolean, * org.esupportail.helpdesk.domain.beans.ArchivedAction) */ @Override @RequestCache public boolean userCanViewArchivedAction( final User user, final boolean invited, final ArchivedAction archivedAction) { return userCanViewArchivedActionOrFileInfo( user, archivedAction.getArchivedTicket(), invited, archivedAction.getEffectiveScope()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanDownload( * org.esupportail.helpdesk.domain.beans.User, boolean, * org.esupportail.helpdesk.domain.beans.ArchivedFileInfo) */ @Override @RequestCache public boolean userCanDownload( final User user, final boolean invited, final ArchivedFileInfo archivedFileInfo) { return userCanViewArchivedActionOrFileInfo( user, archivedFileInfo.getArchivedTicket(), invited, archivedFileInfo.getEffectiveScope()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanApproveClosure( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanApproveClosure(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isWaitingForApproval() && user.equals(ticket.getOwner()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanRefuseClosure( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanRefuseClosure(final User user, final Ticket ticket) { return userCanApproveClosure(user, ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanGiveInformation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanGiveInformation(final User user, final Ticket ticket) { if (user == null) { return false; } if (isDepartmentManager(ticket.getDepartment(), user)) { return true; } if (isInvited(user, ticket)) { return true; } if (user.equals(ticket.getOwner())) { return true; } if (!ticket.isOpened()) { return false; } return true; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanCancel( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanCancel(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isOpened() && user.equals(ticket.getOwner()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanRequestInformation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanRequestInformation(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isOpened() && user.equals(ticket.getManager()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanClose( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanClose(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isOpened() && (user.equals(ticket.getOwner()) || user.equals(ticket.getManager())); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanRefuse( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanRefuse(final User user, final Ticket ticket) { if (user == null) { return false; } if (!ticket.isOpened() || !user.equals(ticket.getManager())) { return false; } try { DepartmentManager manager = getDepartmentManager(ticket.getDepartment(), user); return manager.getRefuseTicket(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanConnect( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanConnect(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isOpened() && isDepartmentManager(ticket.getDepartment(), user); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanPostpone( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanPostpone(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isOpened() && !ticket.isPostponed() && user.equals(ticket.getManager()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanCancelPostponement( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanCancelPostponement(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isPostponed() && user.equals(ticket.getManager()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanReopen( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanReopen(final User user, final Ticket ticket) { if (user == null) { return false; } if (ticket.isOpened()) { return false; } if (!ticket.isWaitingForApproval() && user.equals(ticket.getOwner())) { return true; } DepartmentManager manager = null; try { manager = getDepartmentManager(ticket.getDepartment(), user); } catch (DepartmentManagerNotFoundException e) { return false; } if (manager.equals(ticket.getManager())) { return true; } return manager.getReopenAllTickets(); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanMove( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanMove(final User user, final Ticket ticket) { if (user == null) { return false; } if (ticket.isOpened() && isDepartmentManager(ticket.getDepartment(), user)) { return true; } if (user.equals(ticket.getManager())) { return true; } return false; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanTake( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanTake(final User user, final Ticket ticket) { if (user == null) { return false; } if (!ticket.isOpened() || user.equals(ticket.getManager())) { return false; } DepartmentManager manager; try { manager = getDepartmentManager(ticket.getDepartment(), user); if (ticket.isFree()) { return manager.getTakeFreeTicket(); } return manager.getTakeAlreadyAssignedTicket(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanTakeAndClose( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanTakeAndClose(final User user, final Ticket ticket) { return userCanTake(user, ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanTakeAndRequestInformation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanTakeAndRequestInformation(final User user, final Ticket ticket) { return userCanTake(user, ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanFree( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanFree(final User user, final Ticket ticket) { if (user == null) { return false; } return user.equals(ticket.getManager()) && (ticket.isIncomplete() || ticket.isInProgress() || ticket.isPostponed()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanAssign( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanAssign(final User user, final Ticket ticket) { if (user == null) { return false; } if (!ticket.isOpened()) { return false; } Department department = ticket.getDepartment(); DepartmentManager manager; try { manager = getDepartmentManager(department, user); } catch (DepartmentManagerNotFoundException e) { return false; } if (!manager.getAssignTicket()) { return false; } for (DepartmentManager dm : getAvailableDepartmentManagers(department)) { if (!dm.getUser().equals(user)) { return true; } } return false; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanSetOwner( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanSetOwner( final User user, final Department department) { return isDepartmentManager(department, user); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeOwner( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanChangeOwner(final User user, final Ticket ticket) { if (user == null) { return false; } return ticket.isOpenAssigned() && user.equals(ticket.getManager()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeLabel( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanChangeLabel(final User user, final Ticket ticket) { if (user == null) { return false; } return user.equals(ticket.getManager()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeScope( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanChangeScope(final User user, final Ticket ticket) { if (user == null) { return false; } return user.equals(ticket.getManager()) || (ticket.isOpened() && user.equals(ticket.getOwner())); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanSetOrigin( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanSetOrigin( final User user, final Department department) { if (user == null) { return false; } return isDepartmentManager(department, user); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeOrigin( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanChangeOrigin( final User user, final Ticket ticket) { if (user == null) { return false; } return user.equals(ticket.getManager()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeComputer( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanChangeComputer(final User user, final Ticket ticket) { if (user == null) { return false; } return user.equals(ticket.getManager()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangePriority( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanChangePriority(final User user, final Ticket ticket) { if (user == null) { return false; } return user.equals(ticket.getManager()) || (ticket.isOpened() && user.equals(ticket.getOwner())); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeSpentTime( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanChangeSpentTime(final User user, final Ticket ticket) { if (user == null) { return false; } return user.equals(ticket.getManager()); } /** * @param user * @param ticket * @param objectScope * @param objectOwner * @return true if the user can change the scope of an Action or a FileInfo. */ @RequestCache public boolean userCanChangeActionOrFileInfoScope( final User user, final Ticket ticket, final String objectScope, final User objectOwner) { if (user == null) { return false; } if (user.equals(ticket.getManager())) { return true; } if (!ticket.isOpened()) { return false; } if (ActionScope.MANAGER.equals(objectScope)) { return false; } if (user.equals(ticket.getOwner())) { return true; } if (ActionScope.OWNER.equals(objectScope)) { return false; } if (!isInvited(user, ticket)) { return false; } return user.equals(objectOwner); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeActionScope( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Action) */ @Override @RequestCache public boolean userCanChangeActionScope(final User user, final Action action) { return userCanChangeActionOrFileInfoScope( user, action.getTicket(), action.getScope(), action.getUser()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanChangeFileInfoScope( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.FileInfo) */ @Override @RequestCache public boolean userCanChangeFileInfoScope(final User user, final FileInfo fileInfo) { return userCanChangeActionOrFileInfoScope( user, fileInfo.getTicket(), fileInfo.getScope(), fileInfo.getUser()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewFaq( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress, * org.esupportail.helpdesk.domain.beans.Faq) */ @Override @RequestCache public boolean userCanViewFaq( final User user, final InetAddress client, final Faq faq) { return userCanViewFaq( user, faq, getFaqViewDepartments(user, client)); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanViewFaq( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Faq, * java.util.List) */ @Override @RequestCache public boolean userCanViewFaq( final User user, final Faq faq, final List<Department> visibleDepartments) { if (faq == null) { return false; } String effectiveScope = faq.getEffectiveScope(); if (FaqScope.ALL.equals(effectiveScope)) { return true; } if (user == null) { return false; } if (FaqScope.AUTHENTICATED.equals(effectiveScope)) { return true; } Department department = faq.getDepartment(); if (department == null) { return user.getAdmin(); } if (FaqScope.DEPARTMENT.equals(effectiveScope)) { return visibleDepartments.contains(department); } if (FaqScope.MANAGER.equals(effectiveScope)) { return isDepartmentManager(department, user); } throw new IllegalArgumentException("unexpected FAQ scope [" + effectiveScope + "]"); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditFaqs( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userCanEditFaqs(final User user) { if (user == null) { return false; } if (user.getAdmin()) { return true; } if (daoService.isFaqDepartmentManager(user)) { return true; } return false; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditDepartmentFaqs( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanEditDepartmentFaqs( final User user, final Department department) { if (user == null) { return false; } if (department == null) { return user.getAdmin(); } try { DepartmentManager departmentManager = getDepartmentManager(department, user); return departmentManager.getManageFaq(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditFaq( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Faq) */ @Override @RequestCache public boolean userCanEditFaq(final User user, final Faq faq) { return userCanEditDepartmentFaqs(user, faq.getDepartment()); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditRootFaqs( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userCanEditRootFaqs(final User user) { return userCanEditDepartmentFaqs(user, null); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasVisibleFaq( * org.esupportail.helpdesk.domain.beans.User, java.net.InetAddress) */ @Override @RequestCache public boolean hasVisibleFaq( final User user, final InetAddress client) { return daoService.hasVisibleFaq(user, getFaqViewDepartments(user, client)); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanInvite( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanInvite(final User user, final Ticket ticket) { Department department = ticket.getDepartment(); if (isDepartmentManager(department, user)) { return true; } if (ticket.getOwner().equals(user)) { return true; } return false; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanInviteGroup( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanInviteGroup(final User user, final Ticket ticket) { Department department = ticket.getDepartment(); if (isDepartmentManager(department, user)) { return true; } return false; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanRemoveInvitations( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanRemoveInvitations(final User user, final Ticket ticket) { if (ticket.getOwner().equals(user)) { return true; } if (isDepartmentManager(ticket.getDepartment(), user)) { return true; } return false; } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanEditDepartmentSelection( * org.esupportail.helpdesk.domain.beans.User) */ @Override public boolean userCanEditDepartmentSelection(final User user) { if (user == null) { return false; } return user.getAdmin(); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanUseResponses( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public boolean userCanUseResponses( final User user, final Ticket ticket) { return isDepartmentManager(ticket.getDepartment(), user); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanManageGlobalResponses( * org.esupportail.helpdesk.domain.beans.User) */ @Override public boolean userCanManageGlobalResponses( final User user) { if (user == null) { return false; } return user.getAdmin(); } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanManageDepartmentResponses( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Department) */ @Override @RequestCache public boolean userCanManageDepartmentResponses( final User user, final Department department) { if (user == null) { return false; } if (department == null) { return false; } try { DepartmentManager departmentManager = getDepartmentManager(department, user); return departmentManager.getManageResponses(); } catch (DepartmentManagerNotFoundException e) { return false; } } /** * @see org.esupportail.helpdesk.domain.DomainService#userCanManageIcons( * org.esupportail.helpdesk.domain.beans.User) */ @Override public boolean userCanManageIcons(final User user) { if (user == null) { return false; } return user.getAdmin(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________TICKET_ACTIONS() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#userShowsTicketAfterClosure( * org.esupportail.helpdesk.domain.beans.User) */ @Override @RequestCache public boolean userShowsTicketAfterClosure(final User user) { if (user == null) { return false; } if (!user.getShowTicketAfterClosure()) { return false; } return isDepartmentManager(user); } /** * Add an action to a ticket. * @param ticket * @param action */ protected void addActionToTicket( final Ticket ticket, final Action action) { ticket.setLastActionDate(action.getDate()); ticket.setStatus(action.getStatusAfter()); ticket.computeEffectiveDefaultTicketScope(); ticket.updateTicketChargeTime(daoService.getActions(ticket, true)); ticket.updateTicketClosureTime(action); updateTicket(ticket); } /** * Set the spentTime after/before according its value. * @param action The action to updates * @param ticket * @param spentTime The spentTime to set. */ protected void addSpentTime(final Action action, final Ticket ticket, final long spentTime) { action.setSpentTimeBefore(ticket.getSpentTime()); action.setSpentTimeAfter(spentTime); } /** * Add an action. * @param actionOwner * @param ticket * @param actionMessage * @param actionScope * @return the action created */ protected Action giveInformation( final User actionOwner, final Ticket ticket, final String actionMessage, final String actionScope) { String statusAfter = ticket.getStatus(); if (ticket.isIncomplete() && actionOwner != null) { if (actionOwner.equals(ticket.getOwner())) { statusAfter = TicketStatus.INPROGRESS; } else if (ticket.getManager() != null && actionOwner.equals(ticket.getManager())) { statusAfter = TicketStatus.INPROGRESS; } } Action newAction = new Action( actionOwner, ticket, ActionType.GIVE_INFORMATION, statusAfter, actionScope, actionMessage); addAction(newAction); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#giveInformation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String, boolean) */ @Override public void giveInformation( final User author, final Ticket ticket, final String message, final String actionScope, final boolean alerts) { Action newAction = giveInformation(author, ticket, message, actionScope); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } } /** * Add an action. * @param ticket * @return the action created */ protected Action userInfo( final Ticket ticket) { String userInfo = getUserInfo(ticket.getOwner(), i18nService.getDefaultLocale()); if (userInfo == null) { return null; } return giveInformation( null /* not a user */, ticket, userInfo, ActionScope.MANAGER); } /** * Call the assignment algorithm of the category. * @param ticket * @param excludedUser * @param freeAllowed * @param alerts * @return the action created */ protected Action callAssignmentAlgorithm( final Ticket ticket, final User excludedUser, final boolean freeAllowed, final boolean alerts) { Category category = ticket.getCategory(); String algorithmName = category.getEffectiveAssignmentAlgorithmName(); User user = null; String nextAlgorithmState = null; String assignmentMessage = null; if (algorithmName != null) { AssignmentAlgorithm algorithm = assignmentAlgorithmStore.getAlgorithm(algorithmName); if (algorithm != null) { AssignmentResult result = algorithm.getAssignmentResult( this, ticket, excludedUser); if (result != null) { user = result.getUser(); if (user != null) { if (user.equals(excludedUser)) { assignmentMessage = "<em>Assignment algorithm (" + algorithm.getDescription(Locale.getDefault()) + ") returned [" + user.getRealId() + "] (rejected)</em>"; user = null; } else { assignmentMessage = "<em>Assignment algorithm (" + algorithm.getDescription(Locale.getDefault()) + ") returned [" + user.getRealId() + "]</em>"; } } nextAlgorithmState = result.getNextAlgorithmState(); } else { assignmentMessage = "<br /><em>Assignment algorithm (" + algorithm.getDescription(Locale.getDefault()) + ") returned no assignment</em>"; } } else { assignmentMessage = "<em>Assignment algorithm name: " + algorithmName + " (not found)</em>"; } } Action action = null; if (user == null && ticket.getManager() != null && freeAllowed) { action = freeTicketInternal(null, ticket, assignmentMessage, ActionScope.MANAGER); } else if (user != null && !user.equals(ticket.getManager())) { action = assignTicketInternal(null, ticket, user, assignmentMessage, ActionScope.MANAGER); } if (action != null) { category.setAssignmentAlgorithmState(nextAlgorithmState); daoService.updateCategory(category); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(null, action, false); } } return action; } /** * Add an action. * @param ticket * @param actionScope * @param actionMessage * @return the action created */ protected Action create( final Ticket ticket, final String actionScope, final String actionMessage) { String statusAfter = TicketStatus.FREE; Action newAction = new Action( ticket.getOwner(), ticket, ActionType.CREATE, statusAfter, actionScope, actionMessage); addAction(newAction); newAction.setCategoryAfter(ticket.getCategory()); newAction.setDepartmentAfter(ticket.getDepartment()); newAction.setTicketOwnerAfter(ticket.getOwner()); ticket.setCreationDate(newAction.getDate()); addActionToTicket(ticket, newAction); return newAction; } /** * Add the permanently invited user to a ticket. * @param creationDepartment * @param ticket */ protected void addDepartmentInvitedUsers( final Department creationDepartment, final Ticket ticket) { for (DepartmentInvitation departmentInvitation : getDepartmentInvitations(creationDepartment)) { invite(null, ticket, departmentInvitation.getUser(), null, ActionScope.DEFAULT, false); } } /** * @see org.esupportail.helpdesk.domain.DomainService#addWebTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.User, * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.Category, * java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) */ @Override public Ticket addWebTicket( final User author, final User owner, final Department creationDepartment, final Category category, final String label, final String computer, final int priorityLevel, final String message, final String ticketScope, final String ticketOrigin) { String origin = ticketOrigin; if (origin == null) { origin = getWebOrigin(); } Ticket ticket = new Ticket( author, origin, creationDepartment, category, label, computer, priorityLevel, ticketScope); ticket.computeEffectiveDefaultTicketScope(); daoService.addTicket(ticket); create(ticket, ActionScope.DEFAULT, message); if (owner != null && !author.equals(owner)) { changeTicketOwnerInternal(author, ticket, owner, null, ActionScope.DEFAULT); } userInfo(ticket); callAssignmentAlgorithm(ticket, null, false, false); addDepartmentInvitedUsers(creationDepartment, ticket); addDepartmentInvitedUsers(ticket.getDepartment(), ticket); return ticket; } /** * @see org.esupportail.helpdesk.domain.DomainService#addEmailTicket( * org.esupportail.helpdesk.domain.beans.User, java.lang.String, * org.esupportail.helpdesk.domain.beans.Department, org.esupportail.helpdesk.domain.beans.Category, * java.lang.String) */ @Override public Ticket addEmailTicket( final User sender, final String address, final Department creationDepartment, final Category category, final String label) { Ticket ticket = new Ticket( sender, emailOrigin, creationDepartment, category, label, null, category.getEffectiveDefaultTicketPriority(), TicketScope.PRIVATE); ticket.computeEffectiveDefaultTicketScope(); daoService.addTicket(ticket); create( ticket, ActionScope.DEFAULT, i18nService.getString("TICKET_ACTION.EMAIL_FEED.CREATE", address)); userInfo(ticket); if (category.isVirtual()) { changeCategory( null, ticket, null, category.getRealCategory(), ActionScope.DEFAULT); } callAssignmentAlgorithm(ticket, null, false, false); addDepartmentInvitedUsers(creationDepartment, ticket); addDepartmentInvitedUsers(ticket.getDepartment(), ticket); return ticket; } /** * Add an action. * @param actionOwner * @param ticket * @param actionMessage * @param actionScope * @return the action created */ protected Action takeTicketInternal( final User actionOwner, final Ticket ticket, final String actionMessage, final String actionScope) { String statusAfter; if (ticket.isFree()) { statusAfter = TicketStatus.INPROGRESS; } else { statusAfter = ticket.getStatus(); } Action newAction = new Action( actionOwner, ticket, ActionType.TAKE, statusAfter, actionScope, actionMessage); newAction.setManagerBefore(ticket.getManager()); newAction.setManagerAfter(actionOwner); addAction(newAction); ticket.setManager(newAction.getManagerAfter()); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#takeTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void takeTicket( final User author, final Ticket ticket, final String message, final String actionScope) { Action action = takeTicketInternal(author, ticket, message, actionScope); monitoringSender.ticketMonitoringSendAlerts(author, action, false); } /** * @param author * @param ticket * @param manager * @param message * @param actionScope * @return the action created */ protected Action assignTicketInternal( final User author, final Ticket ticket, final User manager, final String message, final String actionScope) { String statusAfter; if (ticket.isFree()) { statusAfter = TicketStatus.INPROGRESS; } else { statusAfter = ticket.getStatus(); } Action newAction = new Action( author, ticket, ActionType.ASSIGN, statusAfter, actionScope, message); newAction.setManagerBefore(ticket.getManager()); newAction.setManagerAfter(manager); addAction(newAction); ticket.setManager(newAction.getManagerAfter()); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#assignTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.User, java.lang.String, java.lang.String) */ @Override public void assignTicket( final User author, final Ticket ticket, final User manager, final String message, final String actionScope) { Action action = assignTicketInternal(author, ticket, manager, message, actionScope); monitoringSender.ticketMonitoringSendAlerts(author, action, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#changeTicketLabel( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, boolean) */ @Override public void changeTicketLabel( final User author, final Ticket ticket, final String label, final boolean alerts) { Action newAction = new Action( author, ticket, ActionType.CHANGE_LABEL, ticket.getStatus(), ActionScope.DEFAULT, null); newAction.setLabelBefore(ticket.getLabel()); newAction.setLabelAfter(label); addAction(newAction); ticket.setLabel(newAction.getLabelAfter()); addActionToTicket(ticket, newAction); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } } /** * Change the owner of a ticket. * @param author * @param ticket * @param owner * @param message * @param actionScope * @return the action created. */ protected Action changeTicketOwnerInternal( final User author, final Ticket ticket, final User owner, final String message, final String actionScope) { Action newAction = new Action( author, ticket, ActionType.CHANGE_OWNER, ticket.getStatus(), actionScope, message); newAction.setTicketOwnerBefore(ticket.getOwner()); newAction.setTicketOwnerAfter(owner); addAction(newAction); ticket.setOwner(owner); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#changeTicketOwner( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.User, java.lang.String, java.lang.String, boolean) */ @Override public void changeTicketOwner( final User author, final Ticket ticket, final User owner, final String message, final String actionScope, final boolean alerts) { Action action1 = changeTicketOwnerInternal(author, ticket, owner, message, actionScope); Action action2 = userInfo(ticket); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, action1, action2, false); } } /** * @see org.esupportail.helpdesk.domain.DomainService#changeTicketPriority( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * int, boolean) */ @Override public void changeTicketPriority( final User author, final Ticket ticket, final int ticketPriority, final boolean alerts) { Action newAction = new Action( author, ticket, ActionType.CHANGE_PRIORITY, ticket.getStatus(), ActionScope.DEFAULT, null); newAction.setPriorityLevelBefore(ticket.getPriorityLevel()); newAction.setPriorityLevelAfter(ticketPriority); addAction(newAction); ticket.setPriorityLevel(ticketPriority); addActionToTicket(ticket, newAction); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } } /** * @see org.esupportail.helpdesk.domain.DomainService#changeTicketScope( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, boolean) */ @Override public void changeTicketScope( final User author, final Ticket ticket, final String ticketScope, final boolean alerts) { Action newAction = new Action( author, ticket, ActionType.CHANGE_SCOPE, ticket.getStatus(), ActionScope.DEFAULT, null); newAction.setScopeBefore(ticket.getScope()); newAction.setScopeAfter(ticketScope); addAction(newAction); ticket.setScope(ticketScope); addActionToTicket(ticket, newAction); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } } /** * @see org.esupportail.helpdesk.domain.DomainService#changeTicketOrigin( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, boolean) */ @Override public void changeTicketOrigin( final User author, final Ticket ticket, final String ticketOrigin, final boolean alerts) { Action newAction = new Action( author, ticket, ActionType.CHANGE_ORIGIN, ticket.getStatus(), ActionScope.DEFAULT, null); newAction.setOriginBefore(ticket.getOrigin()); newAction.setOriginAfter(ticketOrigin); addAction(newAction); ticket.setOrigin(ticketOrigin); addActionToTicket(ticket, newAction); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } } /** * @see org.esupportail.helpdesk.domain.DomainService#changeTicketComputer( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, boolean) */ @Override public void changeTicketComputer( final User author, final Ticket ticket, final String ticketComputer, final boolean alerts) { Action newAction = new Action( author, ticket, ActionType.CHANGE_COMPUTER, ticket.getStatus(), ActionScope.DEFAULT, null); newAction.setComputerBefore(ticket.getComputer()); newAction.setComputerAfter(ticketComputer); addAction(newAction); ticket.setComputer(ticketComputer); addActionToTicket(ticket, newAction); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } } /** * @see org.esupportail.helpdesk.domain.DomainService#changeTicketSpentTime( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * long, boolean) */ @Override public void changeTicketSpentTime( final User author, final Ticket ticket, final long ticketSpentTime, final boolean alerts) { Action newAction = new Action( author, ticket, ActionType.CHANGE_SPENT_TIME, ticket.getStatus(), ActionScope.DEFAULT, null); addSpentTime(newAction, ticket, ticketSpentTime); addAction(newAction); ticket.setSpentTime(ticketSpentTime); addActionToTicket(ticket, newAction); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } } /** * @param author * @param ticket * @param message * @param actionScope * @return the action created. */ protected Action freeTicketInternal( final User author, final Ticket ticket, final String message, final String actionScope) { String statusAfter = ticket.getStatus(); if (ticket.isInProgress()) { statusAfter = TicketStatus.FREE; } Action newAction = new Action( author, ticket, ActionType.FREE, statusAfter, actionScope, message); newAction.setManagerBefore(ticket.getManager()); newAction.setManagerAfter(null); addAction(newAction); ticket.setManager(null); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#freeTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void freeTicket( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = freeTicketInternal(author, ticket, message, actionScope); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#cancelTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void cancelTicket( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = new Action( author, ticket, ActionType.CANCEL, TicketStatus.CANCELLED, actionScope, message); addAction(newAction); addActionToTicket(ticket, newAction); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * Request information for a ticket. * @param author * @param ticket * @param message * @param actionScope * @return the newly created action */ protected Action requestTicketInformationInternal( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = new Action( author, ticket, ActionType.REQUEST_INFORMATION, TicketStatus.INCOMPLETE, actionScope, message); addAction(newAction); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#requestTicketInformation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void requestTicketInformation( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = requestTicketInformationInternal(author, ticket, message, actionScope); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#takeAndRequestTicketInformation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void takeAndRequestTicketInformation( final User author, final Ticket ticket, final String message, final String actionScope) { Action action1 = takeTicketInternal(author, ticket, null, actionScope); Action action2 = requestTicketInformationInternal(author, ticket, message, actionScope); monitoringSender.ticketMonitoringSendAlerts(author, action1, action2, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#postponeTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String, java.sql.Timestamp) */ @Override public void postponeTicket( final User author, final Ticket ticket, final String message, final String actionScope, final Timestamp recallDate) { Action newAction = new Action( author, ticket, ActionType.POSTPONE, TicketStatus.POSTPONED, actionScope, message); newAction.setRecallDate(recallDate); addAction(newAction); ticket.setRecallDate(recallDate); addActionToTicket(ticket, newAction); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#cancelTicketPostponement( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void cancelTicketPostponement( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = new Action( author, ticket, ActionType.CANCEL_POSTPONEMENT, TicketStatus.INPROGRESS, actionScope, message); addAction(newAction); addActionToTicket(ticket, newAction); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * @param actionOwner * @param ticket * @param actionMessage * @param actionScope * @return the action created */ protected Action closeTicketInternal( final User actionOwner, final Ticket ticket, final String actionMessage, final String actionScope) { String newTicketStatus; String actionType; if (actionOwner == null || ticket.getOwner().equals(actionOwner)) { newTicketStatus = TicketStatus.APPROVED; actionType = ActionType.CLOSE_APPROVE; } else { newTicketStatus = TicketStatus.CLOSED; actionType = ActionType.CLOSE; } Action newAction = new Action( actionOwner, ticket, actionType, newTicketStatus, actionScope, actionMessage); addAction(newAction); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#closeTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String, boolean) */ @Override public void closeTicket( final User author, final Ticket ticket, final String message, final String actionScope, final boolean freeTicketAfterClosure) { Action action1 = closeTicketInternal(author, ticket, message, actionScope); Action action2 = null; if (freeTicketAfterClosure) { action2 = freeTicketInternal(author, ticket, null, ActionScope.DEFAULT); } monitoringSender.ticketMonitoringSendAlerts(author, action1, action2, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#takeAndCloseTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String, boolean) */ @Override public void takeAndCloseTicket( final User author, final Ticket ticket, final String message, final String actionScope, final boolean freeTicketAfterClosure) { Action action1 = takeTicketInternal(author, ticket, null, actionScope); Action action2 = closeTicketInternal(author, ticket, message, actionScope); Action action3 = null; if (freeTicketAfterClosure) { action3 = freeTicketInternal(author, ticket, null, ActionScope.DEFAULT); } monitoringSender.ticketMonitoringSendAlerts(author, action1, action2, action3, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#refuseTicketClosure( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void refuseTicketClosure( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = new Action( author, ticket, ActionType.REFUSE_CLOSURE, TicketStatus.INPROGRESS, actionScope, message); addAction(newAction); addActionToTicket(ticket, newAction); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#approveTicketClosure( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void approveTicketClosure( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = new Action( author, ticket, ActionType.APPROVE_CLOSURE, TicketStatus.APPROVED, actionScope, message); addAction(newAction); addActionToTicket(ticket, newAction); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#expireTicket( * org.esupportail.helpdesk.domain.beans.Ticket, boolean) */ @Override public void expireTicket( final Ticket ticket, final boolean alerts) { Action newAction = new Action( null, ticket, ActionType.EXPIRE, TicketStatus.EXPIRED, ActionScope.DEFAULT, ""); addAction(newAction); addActionToTicket(ticket, newAction); if (alerts) { monitoringSender.ticketMonitoringSendAlerts(null, newAction, true); } } /** * @see org.esupportail.helpdesk.domain.DomainService#connectTicketToTicket( * org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override public void connectTicketToTicket( final Ticket ticket, final Ticket targetTicket) { ticket.setConnectionArchivedTicket(null); ticket.setConnectionTicket(targetTicket); updateTicket(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#connectTicketToArchivedTicket( * org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override public void connectTicketToArchivedTicket( final Ticket ticket, final ArchivedTicket targetArchivedTicket) { ticket.setConnectionTicket(null); ticket.setConnectionArchivedTicket(targetArchivedTicket); updateTicket(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#connectTicketToFaq( * org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.Faq) */ @Override public void connectTicketToFaq( final Ticket ticket, final Faq targetFaq) { ticket.setConnectionFaq(targetFaq); updateTicket(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#refuseTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void refuseTicket( final User author, final Ticket ticket, final String message, final String actionScope) { Action newAction = new Action( author, ticket, ActionType.REFUSE, TicketStatus.REFUSED, actionScope, message); addAction(newAction); addActionToTicket(ticket, newAction); monitoringSender.ticketMonitoringSendAlerts(author, newAction, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#reopenTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, java.lang.String) */ @Override public void reopenTicket( final User author, final Ticket ticket, final String message, final String actionScope) { Action freeAction = null; if (ticket.getManager() != null) { try { getDepartmentManager(ticket.getDepartment(), ticket.getManager()); } catch (DepartmentManagerNotFoundException e) { freeAction = freeTicketInternal(null, ticket, null, ActionScope.DEFAULT); addAction(freeAction); addActionToTicket(ticket, freeAction); } } String status; if (ticket.getManager() == null) { status = TicketStatus.FREE; } else { status = TicketStatus.INPROGRESS; } Action reopenAction = new Action( author, ticket, ActionType.REOPEN, status, actionScope, message); addAction(reopenAction); addActionToTicket(ticket, reopenAction); monitoringSender.ticketMonitoringSendAlerts(author, reopenAction, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#invite( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.User, java.lang.String, java.lang.String, boolean) */ @Override public boolean invite( final User actionOwner, final Ticket ticket, final User invitedUser, final String actionMessage, final String actionScope, final boolean alert) { if (isInvited(invitedUser, ticket)) { return true; } Action newAction = new Action( actionOwner, ticket, ActionType.INVITE, ticket.getStatus(), actionScope, actionMessage); newAction.setInvitedUser(invitedUser); addAction(newAction); addActionToTicket(ticket, newAction); daoService.addInvitation(new Invitation(invitedUser, ticket)); if (alert && !(invitedUser.equals(actionOwner))) { return invitationSender.sendInvitationEmail(actionOwner, invitedUser, ticket); } return false; } /** * @see org.esupportail.helpdesk.domain.DomainService#removeInvitation( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Invitation, boolean) */ @Override public void removeInvitation( final User actionOwner, final Invitation invitation, final boolean alert) { Ticket ticket = invitation.getTicket(); if (!isInvited(invitation.getUser(), ticket)) { return; } daoService.deleteInvitation(invitation); Action newAction = new Action( actionOwner, ticket, ActionType.REMOVE_INVITATION, ticket.getStatus(), ActionScope.DEFAULT, null); newAction.setInvitedUser(invitation.getUser()); addAction(newAction); addActionToTicket(ticket, newAction); if (alert) { ticketMonitoringSendAlerts(actionOwner, ticket, null, false); } } /** * @see org.esupportail.helpdesk.domain.DomainService#uploadFile( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * java.lang.String, byte[], java.lang.String) */ @Override public void uploadFile( final User author, final Ticket ticket, final String filename, final byte[] content, final String actionScope) { FileInfo fileInfo = new FileInfo(filename, content, ticket, author, actionScope); addFileInfo(fileInfo); Action action = new Action( author, ticket, ActionType.UPLOAD, ticket.getStatus(), actionScope, null); action.setFilename(fileInfo.getFilename()); addAction(action); addActionToTicket(ticket, action); } /** * @param actionOwner * @param ticket * @param actionMessage * @param newCategory * @param actionScope * @return the action created */ protected Action changeCategory( final User actionOwner, final Ticket ticket, final String actionMessage, final Category newCategory, final String actionScope) { Action newAction = new Action( actionOwner, ticket, ActionType.CHANGE_CATEGORY, ticket.getStatus(), actionScope, actionMessage); newAction.setCategoryBefore(ticket.getCategory()); newAction.setCategoryAfter(newCategory); addAction(newAction); ticket.setCategory(newCategory); addActionToTicket(ticket, newAction); return newAction; } /** * @param actionOwner * @param ticket * @param actionMessage * @param newDepartment * @param actionScope * @param newCategory * @return the action created */ protected Action changeDepartment( final User actionOwner, final Ticket ticket, final String actionMessage, final Department newDepartment, final String actionScope, final Category newCategory) { Action newAction = new Action( actionOwner, ticket, ActionType.CHANGE_DEPARTMENT, ticket.getStatus(), actionScope, actionMessage); newAction.setDepartmentBefore(ticket.getDepartment()); newAction.setDepartmentAfter(newDepartment); newAction.setCategoryBefore(ticket.getCategory()); newAction.setCategoryAfter(newCategory); addAction(newAction); ticket.setCategory(newCategory); ticket.setDepartment(newDepartment); addActionToTicket(ticket, newAction); return newAction; } /** * @see org.esupportail.helpdesk.domain.DomainService#moveTicket( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket, * org.esupportail.helpdesk.domain.beans.Category, java.lang.String, java.lang.String, boolean, * boolean, boolean, boolean) */ @Override public void moveTicket( final User author, final Ticket ticket, final Category targetCategory, final String message, final String actionScope, final boolean alerts, final boolean free, final boolean monitor, final boolean invite) { Department targetDepartment = targetCategory.getDepartment(); if (!isDepartmentManager(targetDepartment, author)) { if (monitor) { setTicketMonitoring(author, ticket); } if (invite) { invite(author, ticket, author, null, ActionScope.DEFAULT, alerts); } } Action action1 = null; if (ticket.getDepartment().equals(targetDepartment)) { action1 = changeCategory( author, ticket, message, targetCategory, actionScope); } else { action1 = changeDepartment( author, ticket, message, targetDepartment, actionScope, targetCategory); } User oldManager = ticket.getManager(); Action action2 = null; if (free || (oldManager != null && !isDepartmentManager(targetDepartment, oldManager))) { action2 = freeTicketInternal(null, ticket, null, ActionScope.DEFAULT); } Action action3 = null; if (ticket.getManager() == null) { action3 = callAssignmentAlgorithm(ticket, null, false, false); } if (alerts) { monitoringSender.ticketMonitoringSendAlerts(author, action1, action2, action3, false); } if (!ticket.getDepartment().equals(targetDepartment)) { addDepartmentInvitedUsers(ticket.getDepartment(), ticket); } } /** * @see org.esupportail.helpdesk.domain.DomainService#moveTicket( * org.esupportail.helpdesk.domain.beans.Ticket, org.esupportail.helpdesk.domain.beans.Category) */ @Override public void moveTicket( final Ticket ticket, final Category targetCategory) { moveTicket( null, ticket, targetCategory, null, ActionScope.DEFAULT, false, false, false, false); } /** * @see org.esupportail.helpdesk.domain.DomainService#recallPostponedTickets() */ @Override public int recallPostponedTickets() { List<Ticket> ticketsToRecall = daoService.getTicketsToRecall(); if (ticketsToRecall.isEmpty()) { logger.info("no ticket to recall"); } else { for (Ticket ticket : ticketsToRecall) { cancelTicketPostponement(null, ticket, null, ActionScope.DEFAULT); logger.info("recalled ticket #" + ticket.getId()); } } return ticketsToRecall.size(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________EMAIL() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#sendTicketReports() */ @Override public void sendTicketReports() { ticketReporter.sendTicketReports(); } /** * @see org.esupportail.helpdesk.domain.DomainService#sendTicketReport( * org.esupportail.helpdesk.domain.beans.DepartmentManager) */ @Override public void sendTicketReport( final DepartmentManager manager) { ticketReporter.sendTicketReport(manager); } /** * @see org.esupportail.helpdesk.domain.DomainService#sendFaqReports() */ @Override public void sendFaqReports() { faqReporter.sendFaqReports(); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________PRINT() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketPrintContent( * org.esupportail.helpdesk.domain.beans.User, org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @RequestCache public String getTicketPrintContent( final User user, final Ticket ticket) { return ticketPrinter.getTicketPrintContent(user, ticket); } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________DEPRECATED() { // } /** * @see org.esupportail.helpdesk.domain.DomainService#getInheritingMembersCategories() */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Category> getInheritingMembersCategories() { return daoService.getInheritingMembersCategories(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOldTicketTemplates( * org.esupportail.helpdesk.domain.beans.Category) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<OldTicketTemplate> getOldTicketTemplates(final Category category) { return this.daoService.getOldTicketTemplates(category); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteOldTicketTemplate( * org.esupportail.helpdesk.domain.beans.OldTicketTemplate) */ @Override @SuppressWarnings("deprecation") @Deprecated public void deleteOldTicketTemplate(final OldTicketTemplate oldTicketTemplate) { this.daoService.deleteOldTicketTemplate(oldTicketTemplate); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOldFaqParts( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<OldFaqPart> getOldFaqParts(final DeprecatedFaqContainer faqContainer) { return daoService.getOldFaqParts(faqContainer); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteOldFaqPart( * org.esupportail.helpdesk.domain.beans.OldFaqPart) */ @Override @SuppressWarnings("deprecation") @Deprecated public void deleteOldFaqPart(final OldFaqPart oldFaqPart) { daoService.deleteOldFaqPart(oldFaqPart); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOldFaqEntries( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<OldFaqEntry> getOldFaqEntries(final DeprecatedFaqContainer faqContainer) { return daoService.getOldFaqEntries(faqContainer); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOldFaqEntries( * org.esupportail.helpdesk.domain.beans.OldFaqPart) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<OldFaqEntry> getOldFaqEntries(final OldFaqPart oldFaqPart) { return daoService.getOldFaqEntries(oldFaqPart); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteOldFaqEntry( * org.esupportail.helpdesk.domain.beans.OldFaqEntry) */ @Override @SuppressWarnings("deprecation") @Deprecated public void deleteOldFaqEntry(final OldFaqEntry oldFaqEntry) { daoService.deleteOldFaqEntry(oldFaqEntry); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketsConnectedToOldFaqPart( * org.esupportail.helpdesk.domain.beans.OldFaqPart) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Ticket> getTicketsConnectedToOldFaqPart(final OldFaqPart oldFaqPart) { return this.daoService.getTicketsConnectedToOldFaqPart(oldFaqPart); } /** * @see org.esupportail.helpdesk.domain.DomainService#getTicketsConnectedToOldFaqEntry( * org.esupportail.helpdesk.domain.beans.OldFaqEntry) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Ticket> getTicketsConnectedToOldFaqEntry(final OldFaqEntry oldFaqEntry) { return this.daoService.getTicketsConnectedToOldFaqEntry(oldFaqEntry); } /** * @see org.esupportail.helpdesk.domain.DomainService#getOrphenTickets( * org.esupportail.helpdesk.domain.beans.Department) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Ticket> getOrphenTickets(final Department department) { return daoService.getOrphenTickets(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#hasOrphenTickets( * org.esupportail.helpdesk.domain.beans.Department) */ @Override @SuppressWarnings("deprecation") @Deprecated public boolean hasOrphenTickets(final Department department) { return daoService.getOrphenTicketsNumber(department) != 0; } /** * @see org.esupportail.helpdesk.domain.DomainService#getActionsConnectedToOldFaqEntry( * org.esupportail.helpdesk.domain.beans.OldFaqEntry) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Action> getActionsConnectedToOldFaqEntry(final OldFaqEntry oldFaqEntry) { return daoService.getActionsConnectedToOldFaqEntry(oldFaqEntry); } /** * @see org.esupportail.helpdesk.domain.DomainService#getActionsConnectedToOldFaqPart( * org.esupportail.helpdesk.domain.beans.OldFaqPart) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Action> getActionsConnectedToOldFaqPart(final OldFaqPart oldFaqPart) { return daoService.getActionsConnectedToOldFaqPart(oldFaqPart); } /** * @see org.esupportail.helpdesk.domain.DomainService#getV2ActionsToUpgradeToV3(long, int) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Action> getV2ActionsToUpgradeToV3( final long startIndex, final int num) { return daoService.getV2ActionsToUpgradeToV3(startIndex, num); } /** * @see org.esupportail.helpdesk.domain.DomainService#getV2Invitations() */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Action> getV2Invitations() { return daoService.getV2Invitations(); } /** * @see org.esupportail.helpdesk.domain.DomainService#migrateV2Invitation( * org.esupportail.helpdesk.domain.beans.Action) */ @Override @Deprecated public void migrateV2Invitation( final Action action) { Ticket ticket = action.getTicket(); User owner = ticket.getOwner(); if (owner.equals(action.getUser()) || isDepartmentManager(ticket.getDepartment(), action.getUser())) { User invitedUser = action.getInvitedUser(); if (!isInvited(invitedUser, ticket)) { daoService.addInvitation(new Invitation(invitedUser, ticket)); action.setActionType(ActionType.INVITE); daoService.updateAction(action); } else { daoService.deleteAction(action); } } else { daoService.deleteAction(action); } } /** * @see org.esupportail.helpdesk.domain.DomainService#getOldFileInfoContent( * org.esupportail.helpdesk.domain.beans.OldFileInfo) */ @Override @SuppressWarnings("deprecation") @Deprecated public byte[] getOldFileInfoContent(final OldFileInfo oldFileInfo) { return daoService.getOldFileInfoContent(oldFileInfo); } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteOldFileInfo( * org.esupportail.helpdesk.domain.beans.OldFileInfo) */ @Override @SuppressWarnings("deprecation") @Deprecated public void deleteOldFileInfo(final OldFileInfo oldFileInfo) { daoService.deleteOldFileInfo(oldFileInfo); } /** * @see org.esupportail.helpdesk.domain.DomainService#getActionsWithAttachedFile(int) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<Action> getActionsWithAttachedFile(final int maxResults) { return daoService.getV2ActionsWithAttachedFile(maxResults); } /** * @see org.esupportail.helpdesk.domain.DomainService#getV2ArchivedInvitations() */ @Override @SuppressWarnings("deprecation") @Deprecated public List<ArchivedAction> getV2ArchivedInvitations() { return daoService.getV2ArchivedInvitations(); } /** * @see org.esupportail.helpdesk.domain.DomainService#migrateV2ArchivedInvitation( * org.esupportail.helpdesk.domain.beans.ArchivedAction) */ @Override @Deprecated public void migrateV2ArchivedInvitation( final ArchivedAction archivedAction) { ArchivedTicket archivedTicket = archivedAction.getArchivedTicket(); User owner = archivedTicket.getOwner(); if (owner.equals(archivedAction.getUser()) || isDepartmentManager(archivedTicket.getDepartment(), archivedAction.getUser())) { User invitedUser = archivedAction.getInvitedUser(); if (!isInvited(invitedUser, archivedTicket)) { daoService.addArchivedInvitation(new ArchivedInvitation(invitedUser, archivedTicket)); archivedAction.setActionType(ActionType.INVITE); daoService.updateArchivedAction(archivedAction); } else { daoService.deleteArchivedAction(archivedAction); } } else { daoService.deleteArchivedAction(archivedAction); } } /** * @see org.esupportail.helpdesk.domain.DomainService#upgradeTicketTo3d4d0( * org.esupportail.helpdesk.domain.beans.Ticket) */ @Override @Deprecated public void upgradeTicketTo3d4d0( final Ticket ticket) { ticket.setChargeTime(null); ticket.setClosureTime(null); List<Action> actions = daoService.getActions(ticket, true); ticket.updateTicketChargeTime(actions); for (Action action : actions) { ticket.updateTicketClosureTime(action); } if (ticket.getCreationDepartment() == null) { for (Action action : actions) { if (ActionType.CHANGE_DEPARTMENT.equals(action.getActionType())) { ticket.setCreationDepartment(action.getDepartmentBefore()); break; } } } if (ticket.getCreationDepartment() == null) { ticket.setCreationDepartment(ticket.getDepartment()); } ticket.setCreationDate(ticket.getCreationDate()); daoService.updateTicket(ticket); } /** * @see org.esupportail.helpdesk.domain.DomainService#getLastArchivedTicketId() */ @Override @SuppressWarnings("deprecation") @Deprecated public long getLastArchivedTicketId() { return daoService.getLastArchivedTicketId(); } /** * @see org.esupportail.helpdesk.domain.DomainService#upgradeArchivedTicketTo3d4d0( * org.esupportail.helpdesk.domain.beans.ArchivedTicket) */ @Override @Deprecated public void upgradeArchivedTicketTo3d4d0( final ArchivedTicket archivedTicket) { archivedTicket.setChargeTime(null); archivedTicket.setClosureTime(null); List<ArchivedAction> archivedActions = daoService.getArchivedActions(archivedTicket, true); archivedTicket.updateTicketChargeTime(archivedActions); for (ArchivedAction archivedAction : archivedActions) { archivedTicket.updateTicketClosureTime(archivedAction); } if (archivedTicket.getCreationDepartment() == null) { for (ArchivedAction archivedAction : archivedActions) { if (ActionType.CHANGE_DEPARTMENT.equals(archivedAction.getActionType())) { archivedTicket.setCreationDepartment(archivedAction.getDepartmentBefore()); break; } } } archivedTicket.setCreationDate(archivedTicket.getCreationDate()); daoService.updateArchivedTicket(archivedTicket); } /** * @see org.esupportail.helpdesk.domain.DomainService#getLastTicketId() */ @Override @SuppressWarnings("deprecation") @Deprecated public long getLastTicketId() { return daoService.getLastTicketId(); } /** * @see org.esupportail.helpdesk.domain.DomainService#setDefaultOldPriorityLevelToCategories() */ @Override @SuppressWarnings("deprecation") @Deprecated public void setDefaultOldPriorityLevelToCategories() { daoService.setDefaultOldPriorityLevelToCategories(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getLastActionId() */ @Override @SuppressWarnings("deprecation") @Deprecated public long getLastActionId() { return daoService.getLastActionId(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getLastArchivedActionId() */ @Override @SuppressWarnings("deprecation") @Deprecated public long getLastArchivedActionId() { return daoService.getLastArchivedActionId(); } /** * @see org.esupportail.helpdesk.domain.DomainService#setToNullEmpyActionMessages() */ @Override @SuppressWarnings("deprecation") @Deprecated public void setToNullEmpyActionMessages() { daoService.setToNullEmpyActionMessages(); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateBeanSequence(String, String) */ @Override @SuppressWarnings("deprecation") @Deprecated public void updateBeanSequence( final String beanName, final String sequenceName) { daoService.updateBeanSequence(beanName, sequenceName); } /** * @see org.esupportail.helpdesk.domain.DomainService#getUsersWithNullAuthType(int) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<User> getUsersWithNullAuthType(final int maxResults) { return daoService.getUsersWithNullAuthType(maxResults); } /** * @see org.esupportail.helpdesk.domain.DomainService#addUser( * org.esupportail.helpdesk.domain.beans.User) */ @Override @Deprecated public void addUser(final User user) { daoService.addUser(user); } /** * @see org.esupportail.helpdesk.domain.DomainService#upgradeUserKeys(String, java.lang.String) */ @Override @SuppressWarnings("deprecation") @Deprecated public void upgradeUserKeys( final String classname, final String field) { daoService.upgradeUserKeys(classname, field); } /** * @see org.esupportail.helpdesk.dao.DaoService#deleteUsersWithNoneAuthType() */ @Override @SuppressWarnings("deprecation") @Deprecated public void deleteUsersWithNoneAuthType() { daoService.deleteUsersWithNoneAuthType(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqContainers() */ @Override @SuppressWarnings("deprecation") @Deprecated public List<DeprecatedFaqContainer> getFaqContainers() { return daoService.getFaqContainers(); } /** * @see org.esupportail.helpdesk.domain.DomainService#addFaqContainer( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer) */ @Override @SuppressWarnings("deprecation") @Deprecated public void addFaqContainer(final DeprecatedFaqContainer faqContainer) { fckEditorCodeCleaner.removeMaliciousTags(faqContainer); faqContainer.computeEffectiveScope(true); // if (faqContainer.getParent() == null) { // faqContainer.setOrder(daoService.getRootFaqContainersNumber(faqContainer.getDepartment())); // } else { // faqContainer.setOrder(daoService.getSubFaqContainersNumber(faqContainer.getParent())); // } daoService.addFaqContainer(faqContainer); } /** * Update the scope of the children of a FAQ container if needed. * @param faqContainer */ @SuppressWarnings("deprecation") protected void updateFaqContainerChildrenScope(final DeprecatedFaqContainer faqContainer) { daoService.updateFaqEntriesEffectiveScope(faqContainer); for (DeprecatedFaqContainer subFaqContainer : getSubFaqContainers(faqContainer)) { if (subFaqContainer.computeEffectiveScope(true)) { daoService.updateFaqContainer(subFaqContainer); updateFaqContainerChildrenScope(subFaqContainer); } } } /** * @param faqContainer * @see org.esupportail.helpdesk.domain.DomainService#updateFaqContainer( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer) */ @Override @SuppressWarnings("deprecation") @Deprecated public void updateFaqContainer(final DeprecatedFaqContainer faqContainer) { fckEditorCodeCleaner.removeMaliciousTags(faqContainer); boolean effectiveScopeChanged = faqContainer.computeEffectiveScope(true); daoService.updateFaqContainer(faqContainer); if (effectiveScopeChanged) { updateFaqContainerChildrenScope(faqContainer); } } /** * @param faqContainer * @see org.esupportail.helpdesk.domain.DomainService#deleteFaqContainer( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer) */ @Override @SuppressWarnings("deprecation") @Deprecated public void deleteFaqContainer(final DeprecatedFaqContainer faqContainer) { daoService.deleteFaqContainer(faqContainer); // this.daoService.addDeletedItem(new DeletedItem(indexIdProvider.getIndexId(faqContainer))); // if (faqContainer.getParent() == null) { // reorderFaqContainers(daoService.getRootFaqContainers(faqContainer.getDepartment())); // } else { // reorderFaqContainers(daoService.getSubFaqContainers(faqContainer.getParent())); // } } // /** // * Reorder a list of FAQ containers. // * @param faqContainers // */ // @SuppressWarnings("deprecation") // protected void reorderFaqContainers(final List<DeprecatedFaqContainer> faqContainers) { // int i = 0; // for (DeprecatedFaqContainer faqContainer : faqContainers) { // if (faqContainer.getOrder() != i) { // faqContainer.setOrder(i); // daoService.updateFaqContainer(faqContainer); // } // i++; // } // } /** * @see org.esupportail.helpdesk.domain.DomainService#getRootFaqContainers( * org.esupportail.helpdesk.domain.beans.Department) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<DeprecatedFaqContainer> getRootFaqContainers(final Department department) { return this.daoService.getRootFaqContainers(department); } /** * @see org.esupportail.helpdesk.domain.DomainService#getRootFaqContainers() */ @Override @SuppressWarnings("deprecation") @Deprecated public List<DeprecatedFaqContainer> getRootFaqContainers() { return getRootFaqContainers(null); } /** * @see org.esupportail.helpdesk.domain.DomainService#getSubFaqContainers( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<DeprecatedFaqContainer> getSubFaqContainers(final DeprecatedFaqContainer faqContainer) { return this.daoService.getSubFaqContainers(faqContainer); } /** Eclipse outline delimiter. */ /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqEntries() */ @Override @SuppressWarnings("deprecation") @Deprecated public List<DeprecatedFaqEntry> getFaqEntries() { return daoService.getFaqEntries(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getFaqEntries( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqContainer) */ @Override @SuppressWarnings("deprecation") @Deprecated public List<DeprecatedFaqEntry> getFaqEntries(final DeprecatedFaqContainer faqContainer) { return this.daoService.getFaqEntries(faqContainer); } /** * @see org.esupportail.helpdesk.domain.DomainService#addFaqEntry( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqEntry) */ @Override @SuppressWarnings("deprecation") @Deprecated public void addFaqEntry(final DeprecatedFaqEntry faqEntry) { faqEntry.computeEffectiveScope(); // faqEntry.setOrder(daoService.getFaqEntriesNumber(faqEntry.getParent())); this.daoService.addFaqEntry(faqEntry); } /** * @see org.esupportail.helpdesk.domain.DomainService#updateFaqEntry( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqEntry) */ @Override @SuppressWarnings("deprecation") @Deprecated public void updateFaqEntry(final DeprecatedFaqEntry faqEntry) { faqEntry.computeEffectiveScope(); this.daoService.updateFaqEntry(faqEntry); } // /** // * Reorder a list of FAQ entries. // * @param faqContainer // */ // protected void reorderFaqEntries(final DeprecatedFaqContainer faqContainer) { // int i = 0; // for (DeprecatedFaqEntry faqEntry : getFaqEntries(faqContainer)) { // if (faqEntry.getOrder() != i) { // faqEntry.setOrder(i); // daoService.updateFaqEntry(faqEntry); // } // i++; // } // } /** * @see org.esupportail.helpdesk.domain.DomainService#deleteFaqEntry( * org.esupportail.helpdesk.domain.beans.DeprecatedFaqEntry) */ @Override @Deprecated public void deleteFaqEntry(final DeprecatedFaqEntry faqEntry) { this.daoService.deleteFaqEntry(faqEntry); // this.daoService.addDeletedItem(new DeletedItem(indexIdProvider.getIndexId(faqEntry))); // reorderFaqEntries(faqEntry.getParent()); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDeprecatedTicketsLastIndexTime() */ @Override @SuppressWarnings("deprecation") @Deprecated public Timestamp getDeprecatedTicketsLastIndexTime() { return daoService.getState().getTicketsLastIndexTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDeprecatedFaqContainersLastIndexTime() */ @Override @SuppressWarnings("deprecation") @Deprecated public Timestamp getDeprecatedFaqContainersLastIndexTime() { return daoService.getState().getFaqContainersLastIndexTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDeprecatedFaqEntriesLastIndexTime() */ @Override @SuppressWarnings("deprecation") @Deprecated public Timestamp getDeprecatedFaqEntriesLastIndexTime() { return daoService.getState().getFaqEntriesLastIndexTime(); } /** * @see org.esupportail.helpdesk.domain.DomainService#getDeprecatedArchivedTicketsLastIndexTime() */ @Override @SuppressWarnings("deprecation") @Deprecated public Timestamp getDeprecatedArchivedTicketsLastIndexTime() { return daoService.getState().getArchivedTicketsLastIndexTime(); } /** * Migrate a list of FAQ containers. * @param faqContainers * @param parent * @deprecated */ @SuppressWarnings("deprecation") @Deprecated protected void migrateFaqContainers( final List<DeprecatedFaqContainer> faqContainers, final Faq parent) { for (DeprecatedFaqContainer faqContainer : faqContainers) { Faq faq = new Faq(faqContainer, parent); addFaq(faq); daoService.migrateFaqContainerRefs(faqContainer, faq); migrateFaqContainers(getSubFaqContainers(faqContainer), faq); for (DeprecatedFaqEntry faqEntry : getFaqEntries(faqContainer)) { Faq faq2 = new Faq(faqEntry, faq); addFaq(faq2); daoService.migrateFaqEntryRefs(faqEntry, faq2); deleteFaqEntry(faqEntry); } deleteFaqContainer(faqContainer); } } /** * @see org.esupportail.helpdesk.domain.DomainService#migrateFaqContainers() */ @Override @SuppressWarnings("deprecation") @Deprecated public void migrateFaqContainers() { migrateFaqContainers(getRootFaqContainers(), null); for (Department department : getDepartments()) { migrateFaqContainers(getRootFaqContainers(department), null); } } /** Eclipse outline delimiter. */ @SuppressWarnings("unused") private void _______________GETTERS_SETTERS() { // } /** * @param daoService the daoService to set */ public void setDaoService(final DaoService daoService) { this.daoService = daoService; } /** * @param service the i18nService to set */ public void setI18nService(final I18nService service) { i18nService = service; } /** * @return the applicationService */ protected ApplicationService getApplicationService() { return applicationService; } /** * @param applicationService the applicationService to set */ public void setApplicationService(final ApplicationService applicationService) { this.applicationService = applicationService; } /** * @return the daoService */ protected DaoService getDaoService() { return daoService; } /** * @return the i18nService */ protected I18nService getI18nService() { return i18nService; } /** * @return the departmentManagerConfigurator */ protected DepartmentManagerConfigurator getDepartmentManagerConfigurator() { return departmentManagerConfigurator; } /** * @param departmentManagerConfigurator the departmentManagerConfigurator to set */ public void setDepartmentManagerConfigurator( final DepartmentManagerConfigurator departmentManagerConfigurator) { this.departmentManagerConfigurator = departmentManagerConfigurator; } /** * @return the departmentConfigurator */ protected DepartmentConfigurator getDepartmentConfigurator() { return departmentConfigurator; } /** * @param departmentConfigurator the departmentConfigurator to set */ public void setDepartmentConfigurator( final DepartmentConfigurator departmentConfigurator) { this.departmentConfigurator = departmentConfigurator; } /** * @return the indexIdProvider */ protected IndexIdProvider getIndexIdProvider() { return indexIdProvider; } /** * @param indexIdProvider the indexIdProvider to set */ public void setIndexIdProvider(final IndexIdProvider indexIdProvider) { this.indexIdProvider = indexIdProvider; } /** * @param userInfoProvider the userInfoProvider to set */ public void setUserInfoProvider(final UserInfoProvider userInfoProvider) { this.userInfoProvider = userInfoProvider; } /** * @return the userInfoProvider */ protected UserInfoProvider getUserInfoProvider() { return userInfoProvider; } /** * @return the departmentSelector */ protected DepartmentSelector getDepartmentSelector() { return departmentSelector; } /** * @param departmentSelector the departmentSelector to set */ public void setDepartmentSelector(final DepartmentSelector departmentSelector) { this.departmentSelector = departmentSelector; } /** * @return the assignmentAlgorithmStore */ protected AssignmentAlgorithmStore getAssignmentAlgorithmStore() { return assignmentAlgorithmStore; } /** * @param assignmentAlgorithmStore the assignmentAlgorithmStore to set */ public void setAssignmentAlgorithmStore( final AssignmentAlgorithmStore assignmentAlgorithmStore) { this.assignmentAlgorithmStore = assignmentAlgorithmStore; } /** * @param defaultAssignmentAlgorithmName the defaultAssignmentAlgorithmName to set */ public void setDefaultAssignmentAlgorithmName( final String defaultAssignmentAlgorithmName) { this.defaultAssignmentAlgorithmName = defaultAssignmentAlgorithmName; } /** * @return the computerUrlBuilderStore */ protected ComputerUrlBuilderStore getComputerUrlBuilderStore() { return computerUrlBuilderStore; } /** * @param computerUrlBuilderStore the computerUrlBuilderStore to set */ public void setComputerUrlBuilderStore( final ComputerUrlBuilderStore computerUrlBuilderStore) { this.computerUrlBuilderStore = computerUrlBuilderStore; } /** * @param defaultComputerUrlBuilderName the defaultComputerUrlBuilderName to set */ public void setDefaultComputerUrlBuilderName( final String defaultComputerUrlBuilderName) { this.defaultComputerUrlBuilderName = defaultComputerUrlBuilderName; } /** * @return the defaultControlPanelRefreshDelay */ public Integer getDefaultControlPanelRefreshDelay() { return defaultControlPanelRefreshDelay; } /** * @param defaultControlPanelRefreshDelay the defaultControlPanelRefreshDelay to set */ public void setDefaultControlPanelRefreshDelay( final Integer defaultControlPanelRefreshDelay) { this.defaultControlPanelRefreshDelay = defaultControlPanelRefreshDelay; } /** * @return the categoryConfigurator */ protected CategoryConfigurator getCategoryConfigurator() { return categoryConfigurator; } /** * @param categoryConfigurator the categoryConfigurator to set */ public void setCategoryConfigurator(final CategoryConfigurator categoryConfigurator) { this.categoryConfigurator = categoryConfigurator; } /** * @return the historyMaxLength */ protected int getHistoryMaxLength() { return historyMaxLength; } /** * @param historyMaxLength the historyMaxLength to set */ public void setHistoryMaxLength(final int historyMaxLength) { this.historyMaxLength = historyMaxLength; } /** * @return the fckEditorCodeCleaner */ protected FckEditorCodeCleaner getFckEditorCodeCleaner() { return fckEditorCodeCleaner; } /** * @param fckEditorCodeCleaner the fckEditorCodeCleaner to set */ public void setFckEditorCodeCleaner(final FckEditorCodeCleaner fckEditorCodeCleaner) { this.fckEditorCodeCleaner = fckEditorCodeCleaner; } /** * @param userStore the userStore to set */ public void setUserStore(final UserStore userStore) { this.userStore = userStore; } /** * @return the ticketPrinter */ protected TicketPrinter getTicketPrinter() { return ticketPrinter; } /** * @param ticketPrinter the ticketPrinter to set */ public void setTicketPrinter(final TicketPrinter ticketPrinter) { this.ticketPrinter = ticketPrinter; } /** * @return the invitationSender */ protected InvitationSender getInvitationSender() { return invitationSender; } /** * @param invitationSender the invitationSender to set */ public void setInvitationSender(final InvitationSender invitationSender) { this.invitationSender = invitationSender; } /** * @return the monitoringSender */ protected MonitoringSender getMonitoringSender() { return monitoringSender; } /** * @param monitoringSender the monitoringSender to set */ public void setMonitoringSender(final MonitoringSender monitoringSender) { this.monitoringSender = monitoringSender; } /** * @return the ticketReporter */ protected TicketReporter getTicketReporter() { return ticketReporter; } /** * @param ticketReporter the ticketReporter to set */ public void setTicketReporter(final TicketReporter ticketReporter) { this.ticketReporter = ticketReporter; } /** * @return the faqReporter */ protected FaqReporter getFaqReporter() { return faqReporter; } /** * @param faqReporter the faqReporter to set */ public void setFaqReporter(final FaqReporter faqReporter) { this.faqReporter = faqReporter; } }