001/* 002 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl-2.1.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * <a href="mailto:grenard@nuxeo.com">Guillaume</a> 016 */ 017package org.nuxeo.ecm.collections.jsf.actions; 018 019import org.jboss.seam.Component; 020import org.jboss.seam.ScopeType; 021import org.jboss.seam.annotations.Factory; 022import org.jboss.seam.annotations.Name; 023import org.jboss.seam.annotations.Scope; 024import org.jboss.seam.annotations.intercept.BypassInterceptors; 025import org.jboss.seam.core.Events; 026import org.jboss.seam.faces.FacesMessages; 027import org.jboss.seam.international.Messages; 028import org.jboss.seam.international.StatusMessage; 029import org.nuxeo.ecm.collections.api.CollectionManager; 030import org.nuxeo.ecm.collections.api.FavoritesManager; 031import org.nuxeo.ecm.core.api.CoreSession; 032import org.nuxeo.ecm.core.api.DocumentModel; 033import org.nuxeo.ecm.platform.ui.web.api.NavigationContext; 034import org.nuxeo.ecm.webapp.helpers.EventNames; 035import org.nuxeo.runtime.api.Framework; 036 037/** 038 * @since 5.9.4 039 */ 040@Name("favoritesActions") 041@Scope(ScopeType.STATELESS) 042@BypassInterceptors 043public class FavoritesActionBean { 044 045 public void addCurrentDocumentToFavorites() { 046 final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true); 047 final DocumentModel currentDocument = navigationContext.getCurrentDocument(); 048 if (currentDocument != null) { 049 final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class); 050 final CoreSession session = (CoreSession) Component.getInstance("documentManager", true); 051 if (!favoritesManager.isFavorite(currentDocument, session)) { 052 favoritesManager.addToFavorites(currentDocument, session); 053 054 navigationContext.invalidateCurrentDocument(); 055 056 Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED); 057 058 final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true); 059 facesMessages.add(StatusMessage.Severity.INFO, Messages.instance().get("favorites.addedToFavorites")); 060 } 061 062 } 063 } 064 065 public boolean canCurrentDocumentBeAddedToFavorites() { 066 final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true); 067 final DocumentModel currentDocument = navigationContext.getCurrentDocument(); 068 if (currentDocument != null) { 069 final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class); 070 final CollectionManager collectionManager = Framework.getLocalService(CollectionManager.class); 071 final CoreSession session = (CoreSession) Component.getInstance("documentManager", true); 072 return collectionManager.isCollectable(currentDocument) 073 && !favoritesManager.isFavorite(currentDocument, session); 074 } 075 return false; 076 } 077 078 public boolean canCurrentDocumentBeRemovedFromFavorites() { 079 final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true); 080 final DocumentModel currentDocument = navigationContext.getCurrentDocument(); 081 if (currentDocument != null) { 082 final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class); 083 final CoreSession session = (CoreSession) Component.getInstance("documentManager", true); 084 return favoritesManager.isFavorite(currentDocument, session); 085 } 086 return false; 087 } 088 089 @Factory(value = "currentUserFavorites", scope = ScopeType.SESSION) 090 public DocumentModel getCurrentFavorites() { 091 FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class); 092 final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true); 093 final CoreSession session = (CoreSession) Component.getInstance("documentManager", true); 094 return favoritesManager.getFavorites(navigationContext.getCurrentDomain(), session); 095 } 096 097 public void removeCurrentDocumentFromFavorites() { 098 final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true); 099 final DocumentModel currentDocument = navigationContext.getCurrentDocument(); 100 if (currentDocument != null) { 101 final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class); 102 final CoreSession session = (CoreSession) Component.getInstance("documentManager", true); 103 if (favoritesManager.isFavorite(currentDocument, session)) { 104 favoritesManager.removeFromFavorites(currentDocument, session); 105 106 navigationContext.invalidateCurrentDocument(); 107 108 Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED); 109 110 final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true); 111 facesMessages.add(StatusMessage.Severity.INFO, 112 Messages.instance().get("favorites.removedFromFavorites")); 113 } 114 115 } 116 } 117 118}